TocharianOU/mcp-server-kibana
If you are the rightful owner of mcp-server-kibana and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
A Kibana MCP server implementation that allows any MCP-compatible client to access your Kibana instance via natural language or programmatic requests.
Kibana MCP Server
API Specification
This project is based on the official Elastic Kibana API documentation and uses the OpenAPI YAML specification from Elastic Stack 8.x (ES8) to dynamically retrieve and manage all Kibana API endpoints. For the latest details, see the Kibana API documentation.
A Kibana MCP server implementation that allows any MCP-compatible client (such as Claude Desktop) to access your Kibana instance via natural language or programmatic requests.
This project is community-maintained and is not an official product of Elastic or MCP.
š Installation
Quick Install
# Global installation (recommended)
npm install -g @tocharian/mcp-server-kibana
# Or local installation
npm install @tocharian/mcp-server-kibana
Alternative: From Source
git clone https://github.com/TocharianOU/mcp-server-kibana.git
cd mcp-server-kibana
npm install
npm run build
šÆ Quick Start
Method 1: Direct CLI Usage
Using Basic Authentication
# Set your Kibana credentials and run
KIBANA_URL=http://your-kibana-server:5601 \
KIBANA_USERNAME=your-username \
KIBANA_PASSWORD=your-password \
npx @tocharian/mcp-server-kibana
Using Cookie Authentication
# Set your Kibana session cookies and run
KIBANA_URL=http://your-kibana-server:5601 \
KIBANA_COOKIES="sid=your-session-id; security-session=your-security-session" \
npx @tocharian/mcp-server-kibana
Method 2: Claude Desktop Integration (Recommended)
Add to your Claude Desktop configuration file:
Config file locations:
- MacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
Using Basic Authentication
{
"mcpServers": {
"kibana-mcp-server": {
"command": "npx",
"args": ["@tocharian/mcp-server-kibana"],
"env": {
"KIBANA_URL": "http://your-kibana-server:5601",
"KIBANA_USERNAME": "your-username",
"KIBANA_PASSWORD": "your-password",
"KIBANA_DEFAULT_SPACE": "default",
"NODE_TLS_REJECT_UNAUTHORIZED": "0"
}
}
}
}
Using Cookie Authentication
{
"mcpServers": {
"kibana-mcp-server": {
"command": "npx",
"args": ["@tocharian/mcp-server-kibana"],
"env": {
"KIBANA_URL": "http://your-kibana-server:5601",
"KIBANA_COOKIES": "sid=your-session-id; security-session=your-security-session",
"KIBANA_DEFAULT_SPACE": "default",
"NODE_TLS_REJECT_UNAUTHORIZED": "0"
}
}
}
}
Method 3: Using Environment File
# Create .env file
cat > kibana-mcp.env << EOF
KIBANA_URL=http://your-kibana-server:5601
KIBANA_USERNAME=your-username
KIBANA_PASSWORD=your-password
NODE_TLS_REJECT_UNAUTHORIZED=0
EOF
# Run with environment file
env $(cat kibana-mcp.env | xargs) npx @tocharian/mcp-server-kibana
Method 4: Streamable HTTP Mode (NEW in v0.4.0)
Run the server as a standalone HTTP service for remote access and API integration:
# Start HTTP server (default port 3000)
MCP_TRANSPORT=http \
KIBANA_URL=http://your-kibana-server:5601 \
KIBANA_USERNAME=your-username \
KIBANA_PASSWORD=your-password \
npx @tocharian/mcp-server-kibana
# Or with custom port and host
MCP_TRANSPORT=http \
MCP_HTTP_PORT=9000 \
MCP_HTTP_HOST=0.0.0.0 \
KIBANA_URL=http://your-kibana-server:5601 \
KIBANA_USERNAME=your-username \
KIBANA_PASSWORD=your-password \
npx @tocharian/mcp-server-kibana
HTTP Mode Features:
- Exposes MCP server at
http://host:port/mcp
endpoint - Health check available at
http://host:port/health
- Session-based connection management
- Supports both POST (JSON-RPC requests) and GET (SSE streams)
- Compatible with any HTTP client or MCP SDK
Example HTTP client usage:
// Initialize connection
const response = await fetch('http://localhost:3000/mcp', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
method: 'initialize',
params: {
protocolVersion: '2024-11-05',
capabilities: {},
clientInfo: { name: 'my-client', version: '1.0.0' }
},
id: 1
})
});
const sessionId = response.headers.get('mcp-session-id');
// Subsequent requests include session ID
const toolsResponse = await fetch('http://localhost:3000/mcp', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'mcp-session-id': sessionId
},
body: JSON.stringify({
jsonrpc: '2.0',
method: 'tools/list',
params: {},
id: 2
})
});
Features
Core Features
- Connect to local or remote Kibana instances
- Dual transport modes:
- Stdio transport (default) - For Claude Desktop and local MCP clients
- Streamable HTTP transport (NEW in v0.4.0) - For remote access, API integration, and web applications
- Dual authentication support:
- Cookie-based authentication (recommended for browser sessions)
- Basic authentication (username/password)
- SSL/TLS and custom CA certificate support
- Multi-space support for enterprise Kibana environments
- Exposes Kibana API endpoints as both tools and resources
- Search, view, and execute Kibana APIs from MCP clients
- Type-safe, extensible, and easy to integrate
- Session management with automatic UUID generation for HTTP mode
- Health check endpoint for monitoring and load balancing
Visualization Layer (VL) Features
- Complete CRUD operations for Kibana saved objects
- Universal saved object management - works with all object types
- Intelligent parameter handling - supports multiple input formats (arrays, JSON strings, comma-separated)
- Optimized search with pagination support and performance tips
- Bulk operations for efficient mass updates and deletions
- Version control with optimistic concurrency for safe updates
- Reference management for object relationships
- Multi-format type support - flexible input parsing for better UX
Directory Structure
āāā index.ts # Server entry point
āāā src/
ā āāā types.ts # Type definitions and schemas
ā āāā base-tools.ts # Tool registration and API logic
ā āāā prompts.ts # Prompt registration (expert & resource helper)
ā āāā resources.ts # Resource registration (API paths/URIs)
ā āāā vl_search_tools.ts # Visualization Layer - Search tools
ā āāā vl_get_tools.ts # Visualization Layer - Get tools
ā āāā vl_create_tools.ts # Visualization Layer - Create tools
ā āāā vl_update_tools.ts # Visualization Layer - Update tools
ā āāā vl_delete_tools.ts # Visualization Layer - Delete tools
āāā kibana-openapi-source.yaml # Kibana API OpenAPI index
āāā README.md # English documentation
āāā README_zh.md # Chinese documentation
Resources
Resource URI | Description |
---|---|
kibana-api://paths | Returns all available Kibana API endpoints (can filter with search param) |
kibana-api://path/{method}/{encoded_path} | Returns details for a specific API endpoint |
Examples:
kibana-api://paths?search=saved_objects
kibana-api://path/GET/%2Fapi%2Fstatus
Tools
Base Tools
Tool Name | Description | Input Parameters |
---|---|---|
get_status | Get the current status of the Kibana server | space (optional string) - Target Kibana space |
execute_kb_api | Execute a custom Kibana API request | method (GET/POST/PUT/DELETE), path (string), body (optional), params (optional), space (optional string) |
get_available_spaces | Get available Kibana spaces and current context | include_details (optional boolean) - Include full space details |
search_kibana_api_paths | Search Kibana API endpoints by keyword | search (string) |
list_all_kibana_api_paths | List all Kibana API endpoints | None |
get_kibana_api_detail | Get details for a specific Kibana API endpoint | method (string), path (string) |
Visualization Layer (VL) Tools - Saved Objects Management
Tool Name | Description | Input Parameters |
---|---|---|
vl_search_saved_objects | Search for Kibana saved objects (universal) | types (required array), search (optional), fields (optional), perPage (optional), page (optional), space (optional) |
vl_get_saved_object | Get a single saved object by type and ID | type (required), id (required), useResolve (optional), space (optional) |
vl_create_saved_object | Create a new saved object (universal) | type (required), attributes (required), id (optional), overwrite (optional), references (optional), space (optional) |
vl_update_saved_object | Update a single saved object | type (required), id (required), attributes (required), references (optional), version (optional), space (optional) |
vl_bulk_update_saved_objects | Update multiple saved objects in bulk | objects (required array), space (optional) |
vl_bulk_delete_saved_objects | Delete multiple saved objects in bulk | objects (required array), force (optional), space (optional) |
Supported Saved Object Types: dashboard
, visualization
, index-pattern
, search
, config
, lens
, map
, tag
, canvas-workpad
, canvas-element
Prompts
Prompt Name | Description |
---|---|
kibana-tool-expert | Tool expert mode (highly recommended in Claude Desktop), supports intelligent analysis, search, execution, and explanation of Kibana APIs via tools. Recommended for most users. |
kibana-resource-helper | Resource helper mode, guides how to access and use Kibana API info via resource URIs. Suitable for clients that only support resource access or need raw API metadata. |
Configuration
Configure the server via environment variables:
Kibana Connection Settings
Variable Name | Description | Required |
---|---|---|
KIBANA_URL | Kibana server address (e.g. http://localhost:5601) | Yes |
KIBANA_USERNAME | Kibana username (for basic auth) | No* |
KIBANA_PASSWORD | Kibana password (for basic auth) | No* |
KIBANA_COOKIES | Kibana session cookies (for cookie auth) | No* |
KIBANA_DEFAULT_SPACE | Default Kibana space (default: 'default') | No |
KIBANA_CA_CERT | CA certificate path (optional, for SSL verification) | No |
KIBANA_TIMEOUT | Request timeout in ms (default 30000) | No |
KIBANA_MAX_RETRIES | Max request retries (default 3) | No |
NODE_TLS_REJECT_UNAUTHORIZED | Set to 0 to disable SSL certificate validation (use with caution) | No |
*Either KIBANA_COOKIES
or both KIBANA_USERNAME
and KIBANA_PASSWORD
must be provided for authentication.
Transport Mode Settings (NEW in v0.4.0)
Variable Name | Description | Default | Values |
---|---|---|---|
MCP_TRANSPORT | Transport mode selection | stdio | stdio , http |
MCP_HTTP_PORT | HTTP server port (when using HTTP transport) | 3000 | 1-65535 |
MCP_HTTP_HOST | HTTP server host (when using HTTP transport) | localhost | Any valid host |
Transport Mode Details:
- Stdio mode (default): For Claude Desktop and local MCP clients
- HTTP mode: Runs as a standalone HTTP server for remote access, API integration, and web applications
š¦ Package Information
- NPM Package: @tocharian/mcp-server-kibana
- GitHub Repository: TocharianOU/mcp-server-kibana
- Node.js: >= 18.0.0
- Package Size: ~685KB (6.4MB unpacked)
š§ Troubleshooting
Common Issues
"import: command not found" error
# Make sure you're using the latest version
npm install -g @tocharian/mcp-server-kibana@latest
# Or try using node directly
node $(which mcp-server-kibana)
Connection issues
- Verify Kibana URL is accessible
- Check authentication credentials
- For SSL issues, try setting
NODE_TLS_REJECT_UNAUTHORIZED=0
Claude Desktop not detecting the server
- Restart Claude Desktop after config changes
- Check config file syntax with a JSON validator
- Verify environment variables are set correctly
Example Queries
Basic Queries
- "What is the status of my Kibana server?"
- "What is the status of my Kibana server in the 'marketing' space?"
- "List all available Kibana spaces I can access."
- "List all available Kibana API endpoints."
- "Show details for the POST /api/saved_objects/_find endpoint."
- "Execute a custom API request for /api/status."
Saved Objects Management
- "Search for all dashboards in Kibana"
- "Find visualizations containing 'nginx' in the title"
- "Get dashboard with ID 'my-dashboard-123'"
- "Create a new dashboard with title 'Sales Overview'"
- "Update the description of visualization 'viz-456'"
- "Delete multiple old dashboards by their IDs"
- "Search for lens visualizations in the 'analytics' space"
- "Find all canvas workpads created this month"
- "Get the first 10 index patterns with only title and description fields"
- "Bulk update multiple dashboard titles"
- "Search across multiple object types: dashboards and visualizations"
- "Create a new index pattern for 'logs-*' with timestamp field"
Two Prompt Modes in Claude Desktop
When using this server with Claude Desktop, two different prompt interaction modes are supported:
1. Tool-based Prompt Mode
- How it works: Claude Desktop can directly call server tools (including base tools like
get_status
,execute_api
, and VL tools likevl_search_saved_objects
,vl_create_saved_object
) to answer your questions or perform actions. - Best for: Users who want a conversational, guided experience. The server will automatically search, execute, and explain Kibana APIs and manage saved objects.
- Example: "Show all dashboards containing 'sales'" or "Create a new visualization for web analytics"
- Testing tip: Select the
kibana-tool-expert
prompt in Claude Desktop for integration testing, then start using it.
2. Resource-based Prompt Mode
- How it works: Claude Desktop interacts with the server via resource URIs (such as
kibana-api://paths
orkibana-api://path/GET/%2Fapi%2Fstatus
), and the server returns structured data for Claude to parse. - Best for: Advanced users, MCP clients that only support resource access, or programming scenarios needing raw API metadata.
- Example: "Get resource kibana-api://paths?search=dashboard"
Note: The two endpoints in resources
(kibana-api://paths
and kibana-api://path/{method}/{encoded_path}
) have corresponding base tools (list_all_kibana_api_paths
, get_kibana_api_detail
). This design ensures compatibility with MCP clients that cannot intelligently select multiple resources, making it easier for tools like Claude Desktop to interact with Kibana.
Tip: Most users are recommended to use tool mode for a more natural and powerful experience; resource mode offers maximum flexibility for advanced and compatibility use cases.
Development
Install dependencies:
npm install
Build the server:
npm run build
Auto-rebuild in development mode:
npm run watch
Run in different modes:
# Stdio mode (default)
npm start
# HTTP mode
npm run start:http
# Development with TypeScript
npm run start:ts
# HTTP mode with TypeScript
npm run start:http:ts
Debugging
Since the MCP server communicates via stdio, debugging can be inconvenient. It is recommended to use MCP Inspector:
npm run inspector
After starting, Inspector will provide a browser-accessible debugging tool URL.
Community
This project is community-maintained. Contributions and feedback are welcome! Please be respectful and inclusive in all communications, and follow the Elastic Community Code of Conduct.
License
This project is licensed under the Apache License 2.0. See the file for details.
Troubleshooting
- Check if MCP configuration is correct
- Ensure the Kibana address is accessible
- Verify authentication credentials have sufficient permissions
- If using a custom CA, ensure the certificate path is correct and readable
- If using
NODE_TLS_REJECT_UNAUTHORIZED=0
, be aware of security risks - Check error messages output in the terminal