Provides access to query Elasticsearch data through Kibana's API, enabling log searches and data retrieval with support for custom queries, sorting, and filtering.
Enables AI assistants to interact with Kibana dashboards, visualizations, data views, and saved searches, with tools for executing searches, exporting dashboards, and querying Elasticsearch data through Kibana's REST API.
Kibana MCP Server
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
Architecture
Quick Start
Using Docker/Podman (Recommended)
Clone and configure:
git clone <repository-url> cd kibana-mcp-poc cp .env.example .env # Edit .env with your Kibana credentialsRun with Docker Compose:
docker-compose up --buildOr with Podman:
podman build -t kibana-mcp . podman run -p 3000:3000 --env-file .env kibana-mcpVerify it's running:
curl http://localhost:3000/health
Local Development
Install dependencies:
npm installConfigure environment:
cp .env.example .env # Edit .env with your Kibana credentialsRun in development mode:
# Stdio mode (for Claude Desktop) npm run dev # HTTP mode (for testing) npm run dev:httpBuild 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:
Authentication Methods
API Key (Recommended):
Username/Password:
MCP Capabilities
Resources (Read-Only Data)
kibana://dashboards- List all dashboardskibana://dashboard/{id}- Get specific dashboardkibana://visualizations- List all visualizationskibana://data-views- List all data viewskibana://saved-searches- List saved searches
Tools (Executable Functions)
list_dashboards
List dashboards with optional search and pagination.
get_dashboard
Get detailed information about a specific dashboard.
export_dashboard
Export dashboard with all dependencies.
search_logs
Query Elasticsearch data through Kibana.
Other Tools
list_visualizations- List visualizationsget_visualization- Get visualization detailslist_data_views- List available data views
Connecting to AI Assistants
Claude Code
Claude Code connects to MCP servers running over HTTP/SSE. You have two options:
Option 1: Using Docker (Recommended)
Start the server:
docker-compose up -dAdd to Claude Code settings (
~/.config/claude-code/settings.jsonon Linux/macOS or%APPDATA%\claude-code\settings.jsonon Windows):{ "mcpServers": { "kibana": { "url": "http://localhost:3000" } } }Restart Claude Code to load the new MCP server.
Option 2: Direct Configuration with Environment Variables
Then start the server manually:
Verification: In Claude Code, type /mcp to see available servers. You should see "kibana" in the list with resources and tools.
Amazon Q Developer
Amazon Q Developer also supports MCP servers via HTTP/SSE transport.
Setup with Docker
Start the Kibana MCP server:
docker run -d \ --name kibana-mcp \ -p 3000:3000 \ -e KIBANA_URL=https://your-kibana.com \ -e KIBANA_API_KEY=your-api-key \ -e MCP_TRANSPORT=http \ kibana-mcp:latestConfigure Amazon Q Developer:
Edit your Amazon Q configuration file (location varies by IDE):
VS Code (
settings.json):{ "amazonQ.mcp.servers": { "kibana": { "url": "http://localhost:3000/sse" } } }JetBrains IDEs (Settings → Tools → Amazon Q):
Add MCP Server
Name:
kibanaURL:
http://localhost:3000/sse
Restart your IDE to activate the connection.
Alternative: MCP Proxy for stdio
If your tool requires stdio transport, use mcp-proxy to bridge:
Then configure Amazon Q to use the proxy as a stdio command:
Claude Desktop (stdio mode)
For local Claude Desktop app (not Claude Code), use stdio transport:
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
Generic HTTP/SSE Clients
Connect any MCP client to the HTTP server at:
The server exposes these endpoints:
GET /health- Health checkGET /info- Server informationGET /sse- SSE connection endpoint for MCP protocol
Docker Deployment
Build Image
Run Container
Docker Compose
Development
Project Structure
Adding New Tools
Define the tool schema in
src/tools/index.tsImplement the handler in the
tools/callrequest handlerAdd corresponding Kibana client method if needed
Testing
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
Container Issues
Contributing
Contributions are welcome! Please follow these guidelines:
Use TypeScript for all new code
Follow existing code style
Add tests for new features
Update documentation
License
MIT