Skip to main content
Glama
jerrelblankenship

Kibana MCP Server

Kibana MCP Server

CI

A Model Context Protocol (MCP) server that enables AI assistants to interact with Kibana dashboards, visualizations, and Elasticsearch data through a standardized interface.

Features

  • Resources: Read-only access to Kibana dashboards, visualizations, data views, and saved searches

  • Tools: Execute searches, export dashboards, and query Elasticsearch data

  • Dual Transport: Supports both stdio (local) and HTTP/SSE (containerized) transports

  • Docker Support: Production-ready containerization with Docker and Podman

  • Authentication: API key and username/password authentication

  • Type-Safe: Built with TypeScript for enhanced reliability

Related MCP server: kibana-mcp

Architecture

┌─────────────────┐
│   AI Assistant  │
│  (Claude, etc.) │
└────────┬────────┘
         │ MCP Protocol
         │
┌────────▼────────┐      ┌─────────────┐
│   MCP Server    │─────▶│   Kibana    │
│  (This Server)  │      │   REST API  │
└─────────────────┘      └──────┬──────┘
                                │
                         ┌──────▼──────┐
                         │Elasticsearch│
                         └─────────────┘

Quick Start

Docker Compose is the preferred way to run this server. Credentials are passed via shell environment variables so nothing is hard-coded.

  1. Export your Kibana credentials (API key or username/password):

    # Option A: API key
    export KIBANA_API_KEY=your_api_key_here
    
    # Option B: Username/password
    export KIBANA_USERNAME=your_username
    export KIBANA_PASSWORD=your_password
  2. Build and start:

    docker compose up --build -d
  3. Verify it's running:

    curl http://localhost:3000/health
  4. View logs / stop:

    docker compose logs -f
    docker compose down

The KIBANA_URL defaults to https://localhost:5601 and can be overridden:

export KIBANA_URL=https://your-kibana-instance.com

Local Development

  1. Install dependencies:

    npm install
  2. Configure environment:

    cp .env.example .env
    # Edit .env with your Kibana credentials
  3. Run in development mode:

    # Stdio mode (for Claude Desktop)
    npm run dev
    
    # HTTP mode (for testing)
    npm run dev:http
  4. Build and run production:

    npm run build
    npm start        # stdio mode
    npm start:http   # HTTP mode

Configuration

Environment Variables

Create a .env file based on .env.example:

# Kibana Configuration (required)
KIBANA_URL=https://your-kibana-instance.com
KIBANA_API_KEY=your_api_key_here

# Alternative: Username/Password Authentication
# KIBANA_USERNAME=your_username
# KIBANA_PASSWORD=your_password

# Server Configuration
MCP_TRANSPORT=http           # or stdio
HTTP_PORT=3000               # Port for HTTP server
LOG_LEVEL=info               # debug, info, warn, error

Authentication Methods

API Key (Recommended):

KIBANA_URL=https://kibana.example.com
KIBANA_API_KEY=your_base64_encoded_api_key

Username/Password:

KIBANA_URL=https://kibana.example.com
KIBANA_USERNAME=admin
KIBANA_PASSWORD=your_password

MCP Capabilities

Resources (Read-Only Data)

  • kibana://dashboards - List all dashboards

  • kibana://dashboard/{id} - Get specific dashboard

  • kibana://visualizations - List all visualizations

  • kibana://data-views - List all data views

  • kibana://saved-searches - List saved searches

Tools (Executable Functions)

list_dashboards

List dashboards with optional search and pagination.

{
  "search": "security",
  "page": 1,
  "perPage": 20
}

get_dashboard

Get detailed information about a specific dashboard.

{
  "id": "dashboard-id-here"
}

export_dashboard

Export dashboard with all dependencies.

{
  "id": "dashboard-id-here",
  "includeReferences": true
}

search_logs

Query Elasticsearch data through Kibana.

{
  "index": "logs-*",
  "query": {
    "match": {
      "message": "error"
    }
  },
  "size": 10,
  "sort": [{"@timestamp": "desc"}]
}

Other Tools

  • list_visualizations - List visualizations

  • get_visualization - Get visualization details

  • list_data_views - List available data views

Connecting to AI Assistants

This server supports two transports. They share the same core server logic (src/server.ts) but differ in how the client communicates with it:

HTTP/SSE (src/http-server.ts)

stdio (src/index.ts)

How it works

Long-running HTTP server. Clients connect via Server-Sent Events (SSE) and send JSON-RPC over POST requests.

Client spawns the server as a child process. JSON-RPC messages flow over stdin/stdout.

When to use

Remote/containerized deployments, Claude Code, any network-based MCP client

Local-only usage, Claude Desktop app

Run with

docker compose up -d or npm run dev:http

npm run dev or npm start

Entry point

src/http-server.ts

src/index.ts

Claude Code (HTTP/SSE transport)

Claude Code connects to MCP servers over SSE. Start the HTTP server first, then register it with Claude Code.

# Start the server
docker compose up -d

# Add as a user-scoped MCP server
claude mcp add --scope user --transport sse kibana http://localhost:3000/sse

Option 2: Project config (.mcp.json)

Create .mcp.json in your project root (shared with the team via version control):

{
  "mcpServers": {
    "kibana": {
      "type": "sse",
      "url": "http://localhost:3000/sse"
    }
  }
}

Verification: In Claude Code, type /mcp to see available servers. You should see "kibana" listed with its resources and tools.

Claude Desktop (stdio transport)

For the Claude Desktop app, use stdio transport.

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "kibana": {
      "command": "node",
      "args": ["/path/to/jb-kibana-mcp/dist/index.js"],
      "env": {
        "KIBANA_URL": "https://your-kibana.com",
        "KIBANA_API_KEY": "your-api-key"
      }
    }
  }
}

Generic MCP Clients (SSE)

Any MCP client that supports SSE transport can connect to:

http://localhost:3000/sse

The SSE handshake flow:

  1. Client opens GET /sse — receives an endpoint event with a session-specific message URL

  2. Client sends JSON-RPC messages via POST /message?sessionId=<id>

  3. Server streams responses back over the SSE connection

Additional endpoints:

  • GET /health — Health check (returns JSON status)

  • GET /info — Server metadata and capabilities

Docker Deployment

Build Image

docker build -t kibana-mcp:latest .

Run Container

docker run -d \
  --name kibana-mcp \
  -p 3000:3000 \
  -e KIBANA_URL=https://your-kibana.com \
  -e KIBANA_API_KEY=your-api-key \
  kibana-mcp:latest

Docker Compose

# Start
docker compose up -d

# View logs
docker compose logs -f

# Stop
docker compose down

Development

Project Structure

jb-kibana-mcp/
├── src/
│   ├── index.ts              # Stdio transport entry point (Claude Desktop)
│   ├── http-server.ts        # HTTP/SSE transport entry point (Claude Code, Docker)
│   ├── server.ts             # Core MCP server logic
│   ├── kibana/
│   │   ├── client.ts         # Kibana API client
│   │   ├── types.ts          # TypeScript types
│   │   └── auth.ts           # Authentication
│   ├── resources/
│   │   └── index.ts          # MCP resources
│   └── tools/
│       └── index.ts          # MCP tools
├── Dockerfile
├── docker-compose.yml
└── package.json

Adding New Tools

  1. Define the tool schema in src/tools/index.ts

  2. Implement the handler in the tools/call request handler

  3. Add corresponding Kibana client method if needed

Testing

Unit tests (no external dependencies, mocked Kibana):

npm test                       # run once
npm run test:watch             # watch mode
npm run test:coverage          # with coverage report

Integration tests (require a live Kibana instance):

Integration tests start an in-process MCP server, connect over SSE, and exercise every tool and resource against real Kibana. They are kept separate from unit tests so npm test stays fast and offline.

  1. Set environment variables — the tests load .env via dotenv, so values already in .env (like KIBANA_URL) are picked up automatically. Shell environment variables take precedence. You need:

    # Already in .env:
    KIBANA_URL=https://your-kibana-instance.com
    
    # Set in your shell (or add to .env):
    export KIBANA_API_KEY=your-api-key
    # — or —
    export KIBANA_USERNAME=you@example.com
    export KIBANA_PASSWORD=your-password
  2. Run:

    npm run test:integration

    If KIBANA_URL or credentials are missing, the tests skip automatically (no failures).

What the integration tests cover:

Area

Tests

MCP handshake

SSE connect, initialize, initialized notification

tools/list

All 7 tools registered

resources/list

All 4 resources registered

list_dashboards

Pagination, search filtering

get_dashboard

Fetch by ID

export_dashboard

NDJSON export with references

list_visualizations

Listing

get_visualization

Fetch by ID

list_data_views

Listing

search_logs

match_all, size limits, sort

resources/read

Read dashboards, data-views, dashboard by ID

Error handling

Nonexistent dashboard, unknown tool

Manual testing:

# Health check
curl http://localhost:3000/health

# Server info
curl http://localhost:3000/info

# Test with MCP Inspector
npx @modelcontextprotocol/inspector dist/index.js

Security

  • Container Isolation: Runs as non-root user (mcpuser)

  • Minimal Base Image: Uses node:20-slim to reduce attack surface

  • Secret Management: Environment variables for credentials

  • API Authentication: Supports API keys and basic auth

  • RBAC: Respects Kibana's role-based access control

Troubleshooting

Connection Issues

# Check if Kibana is accessible
curl -I https://your-kibana.com/api/status

# Verify authentication
curl -H "Authorization: ApiKey YOUR_KEY" \
     -H "kbn-xsrf: true" \
     https://your-kibana.com/api/status

Container Issues

# View logs
docker logs kibana-mcp-server

# Shell into container
docker exec -it kibana-mcp-server /bin/sh

# Rebuild without cache
docker compose build --no-cache

CI

A GitHub Actions workflow runs on every pull request targeting main and on pushes to main. It builds the project and runs unit tests across Node.js 20 and 22. See .github/workflows/ci.yml.

Contributing

Contributions are welcome! Please follow these guidelines:

  1. Use TypeScript for all new code

  2. Follow existing code style

  3. Add tests for new features

  4. Update documentation

  5. Ensure CI passes — the build and unit tests must succeed before merging

License

MIT

Resources

Available Tools

7 tools
export_dashboardC

Export a dashboard with all its dependencies (visualizations, data views, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDashboard ID to export
includeReferencesNoInclude all referenced objects (default: true)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions exporting with dependencies but doesn't cover critical aspects like output format (e.g., file type, download method), permissions required, whether it's a read-only or destructive operation, or any rate limits. This leaves significant gaps for an agent to understand the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It front-loads the core action and resource, and every word earns its place by specifying the scope ('with all its dependencies'). No unnecessary details or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of an export operation with no annotations and no output schema, the description is incomplete. It lacks information on what the export produces (e.g., a file, JSON), how to handle the output, permissions, or error conditions. For a tool that likely involves data transformation and output, this is inadequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters ('id' and 'includeReferences') thoroughly. The description adds no additional meaning beyond what the schema provides, such as clarifying dependency types or export implications. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Export') and resource ('a dashboard'), including the scope of dependencies. It distinguishes from sibling tools like 'get_dashboard' or 'list_dashboards' by specifying an export operation rather than retrieval. However, it doesn't explicitly differentiate from potential export-related siblings if they existed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing the dashboard ID), exclusions, or comparisons to sibling tools like 'get_dashboard' for viewing instead of exporting. Usage is implied but not explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dashboardC

Get detailed information about a specific dashboard

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDashboard ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves 'detailed information,' which implies a read-only operation, but doesn't specify what 'detailed' includes, whether it requires authentication, potential rate limits, or error handling. This is a significant gap for a tool with no structured safety hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that directly states the tool's function without any unnecessary words. It is front-loaded with the core purpose, making it efficient and easy to parse, which is ideal for an AI agent selecting tools.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'detailed information' includes in the return value, nor does it cover behavioral aspects like permissions or errors. Given the complexity of retrieving dashboard data, more context is needed to guide the agent effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the 'id' parameter documented as 'Dashboard ID.' The description adds no additional semantic context beyond this, such as format examples or where to obtain the ID. Given the high schema coverage, a baseline score of 3 is appropriate, as the schema handles the parameter documentation adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('detailed information about a specific dashboard'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'list_dashboards' or 'get_visualization', which would require mentioning it retrieves a single dashboard by ID rather than listing multiple or fetching visualization data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention that 'list_dashboards' should be used for listing multiple dashboards or that 'get_visualization' is for visualization-specific data, nor does it specify prerequisites like needing a dashboard ID. This leaves the agent to infer usage from context alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_visualizationC

Get detailed information about a specific visualization

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVisualization ID

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a 'get' operation which implies read-only behavior, but doesn't specify authentication requirements, rate limits, error conditions, or what format the 'detailed information' returns. The description adds minimal behavioral context beyond the basic operation type.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that gets straight to the point without unnecessary words. It's appropriately sized for a simple retrieval tool, though it could potentially be more specific about what 'detailed information' includes to be more helpful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what information is returned, error handling, authentication needs, or how this tool fits into the broader visualization/dashboard ecosystem with its siblings. The description leaves too many behavioral questions unanswered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage with the single parameter 'id' clearly documented as 'Visualization ID'. The description doesn't add any parameter semantics beyond what the schema already provides, but with complete schema coverage, the baseline score of 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool 'Get detailed information about a specific visualization' clearly indicates a retrieval operation with a specific target, but it's somewhat vague about what 'detailed information' entails. It distinguishes from list_visualizations by focusing on a single item, but doesn't explicitly contrast with get_dashboard or other siblings beyond the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. While it's implied this is for retrieving a single visualization when you have its ID, there's no mention of when to choose this over list_visualizations or how it relates to get_dashboard, export_dashboard, or other sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_dashboardsB

List all Kibana dashboards with optional search filtering

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoOptional search term to filter dashboards by title
pageNoPage number for pagination (default: 1)
perPageNoNumber of results per page (default: 20, max: 100)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions 'optional search filtering' but doesn't disclose important behavioral traits like whether this is a read-only operation, what permissions are needed, whether results are paginated (implied by parameters but not stated), or what the return format looks like. The description is minimal and lacks behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's appropriately sized and front-loaded with the core purpose, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is incomplete for a tool with 3 parameters and list functionality. It doesn't explain what the tool returns (dashboard objects, IDs, metadata?), doesn't mention authentication or rate limits, and provides minimal behavioral context. For a list tool with zero structured coverage, this is inadequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents all three parameters. The description adds no additional parameter semantics beyond what's in the schema (e.g., doesn't explain search syntax or pagination behavior). Baseline 3 is appropriate when schema does all the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List all Kibana dashboards') and resource ('Kibana dashboards'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'get_dashboard' or 'list_visualizations', which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context through 'optional search filtering' but doesn't explicitly state when to use this tool versus alternatives like 'get_dashboard' (for single dashboard details) or 'search_logs' (for different resource types). No explicit when-not or alternative guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_data_viewsB

List all data views (index patterns) in Kibana

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a listing operation, implying it's likely read-only and non-destructive, but doesn't confirm this or add any context about permissions, rate limits, pagination, or return format. This leaves significant gaps for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without any wasted words. It's appropriately sized for a simple listing tool with no parameters, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate. It states what the tool does but lacks behavioral details and usage guidance. For a basic listing operation, this might suffice, but the absence of annotations means more context would be helpful for reliable agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, and since there are none, it doesn't need to compensate for any gaps, earning a baseline score above the minimum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List all') and resource ('data views (index patterns) in Kibana'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'list_dashboards' or 'list_visualizations' beyond naming the specific resource type, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for selecting this over other listing tools, or any exclusions, leaving the agent to infer usage based solely on the tool name and resource type.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_visualizationsB

List all Kibana visualizations

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoOptional search term to filter visualizations by title
pageNoPage number for pagination (default: 1)
perPageNoNumber of results per page (default: 20, max: 100)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('List') but doesn't mention whether this is a read-only operation, if it requires authentication, what the output format looks like, or any rate limits. For a listing tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for a straightforward listing tool, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (a simple list operation) and the schema's full parameter coverage, the description is minimally adequate. However, without annotations or an output schema, it fails to explain what the returned data looks like (e.g., structure, fields) or any behavioral nuances, leaving room for improvement in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, clearly documenting all three parameters (search, page, perPage) with their types, defaults, and constraints. The description adds no additional parameter information beyond what the schema provides, so it meets the baseline for adequate but not exceptional coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List') and resource ('all Kibana visualizations'), making the purpose immediately understandable. However, it doesn't distinguish this tool from its sibling 'get_visualization' (singular vs. plural), which suggests a potential overlap in functionality that isn't clarified.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_visualization' or 'list_dashboards'. It lacks any context about prerequisites, typical use cases, or exclusions, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_logsC

Search Elasticsearch data through Kibana using Elasticsearch query DSL

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYesIndex pattern or name to search
queryNoElasticsearch query DSL (e.g., {"match_all": {}} or {"term": {"field": "value"}})
sizeNoNumber of results to return (default: 10, max: 100)
fromNoStarting offset for pagination (default: 0)
sortNoSort specification (e.g., [{"@timestamp": "desc"}])

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. It mentions using Elasticsearch query DSL but doesn't cover critical aspects like authentication requirements, rate limits, error handling, or what happens on execution (e.g., whether it's read-only or has side effects). For a search tool with complex parameters, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function. It's front-loaded with the core action and avoids unnecessary words. However, it could be slightly more structured by explicitly separating purpose from context or constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, nested objects, no output schema, and no annotations), the description is incomplete. It doesn't explain return values, error conditions, or behavioral traits like pagination or query limitations. For a search tool with rich input schema but no output schema, more context is needed to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema by mentioning 'Elasticsearch query DSL' and 'Kibana', but doesn't provide additional syntax, format details, or examples beyond what's in the schema descriptions. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Search') and target resource ('Elasticsearch data through Kibana'), making the purpose evident. However, it doesn't differentiate this tool from its siblings (like list_data_views or get_dashboard), which are related but distinct operations. The description is specific but lacks sibling comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing valid indices or query knowledge), exclusions, or comparisons to sibling tools like list_data_views for browsing available indices. Usage context is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 7 tool updatesv0.1.0
    • First observedexport_dashboard
    • First observedget_dashboard
    • First observedget_visualization
    • First observedlist_dashboards
    • First observedlist_data_views
    • First observedlist_visualizations
    • First observedsearch_logs

TDQS

B3.2/5.0

Scored across 7 tools

Disambiguation4/5

Most tools have distinct purposes targeting specific Kibana resources like dashboards, visualizations, data views, and logs. However, get_dashboard and get_visualization are structurally similar (both retrieve details), which could cause minor confusion if an agent needs to differentiate between resource types without clear context. The other tools are well-separated by action and resource.

Naming Consistency5/5

All tools follow a consistent verb_noun naming pattern using snake_case (e.g., list_dashboards, get_visualization, search_logs). The verbs (export, get, list, search) are appropriately chosen for their actions, and there are no deviations in style or convention throughout the set.

Tool Count5/5

With 7 tools, this server is well-scoped for Kibana operations, covering key areas like dashboards, visualizations, data views, and log searches. Each tool serves a clear purpose without redundancy, making the count appropriate for the domain and not overwhelming for agents to navigate.

Completeness3/5

The toolset covers listing and getting resources, plus exporting dashboards and searching logs, but lacks CRUD operations for creating, updating, or deleting dashboards, visualizations, or data views. This is a notable gap that could limit agents from performing full lifecycle management, though basic retrieval and search workflows are supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • 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
    A
    quality
    D
    maintenance
    Enables AI assistants to search, analyze, and interact with Elasticsearch through natural language.
    18
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Enables LLM clients to interact with OpenSearch Dashboards, including reading saved objects, listing tenants and index patterns, and querying logs through the Dashboards API.
    5
    MIT