Kibana REST API服务工具

MCP服务器提供了使用FastMCP和Pydantic的Kibana REST API端点工具,支持认证、数据视图、保存对象和空间管理功能。

  • by s-p-a-r-r-o-w-ai
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 s-p-a-r-r-o-w-ai/mcp_server_kibana

使用说明

Kibana的MCP服务器

MCP服务器使用FastMCP和Pydantic为Kibana REST API端点提供工具。

特性

🔐 认证

  • 承载令牌身份验证:内置FastMCP令牌验证
  • API关键支持:使用安全访问 Authorization: Bearer <token> 头球
  • Kibana集成:支持 KIBANA_API_KEY 用于Kibana身份验证

🌐 空间支持

所有工具都支持可选 space 针对特定Kibana空间的参数(例如。, default, marketing).

📊 数据视图

  • get_all_data_views(space) -获取所有数据视图
  • get_data_view(id, space) -获取特定数据视图
  • create_data_view(data_view, override, space) -创建新的数据视图
  • update_data_view(id, data_view, override, space) -更新数据视图

💾 保存的对象

  • find_saved_objects(..., space) -使用过滤器搜索已保存的对象
  • create_saved_object(type, attributes, id, references, space) -创建已保存的对象
  • get_saved_object(type, id, space) -获取已保存的对象
  • update_saved_object(type, id, attributes, references, space) -更新已保存的对象

🏢 空间管理

  • get_all_spaces() -获取所有Kibana空间
  • get_space(id) -获取特定空间
  • create_space(id, name, ...) -创建新空间
  • update_space(id, name, ...) -更新空间

快速开始

使用Docker Compose(推荐)

  1. 复制环境文件:
cp .env.example .env
  1. 编辑 .env 根据您的配置:
KIBANA_URL=https://your-kibana-instance.com
KIBANA_API_KEY=your-kibana-api-key
# MCP_API_KEY=optional-bearer-token  # If not set, auto-generated on startup
  1. 启动服务:
docker compose up -d

设置包括:

  • MCP Kibana服务器:内置令牌验证的直接服务
  1. 验证设置:
# Check server logs for auto-generated token
docker compose logs mcp-server

# Test 1: Without auth (should return 401)
curl http://localhost:8080/mcp
# Expected: HTTP/1.1 401 Unauthorized

# Test 2: With bearer token from logs (should return 200)
curl -H "Authorization: Bearer <token-from-logs>" http://localhost:8080/mcp
# Expected: HTTP/1.1 200 OK
  1. 查看日志:
# View server logs
docker compose logs -f mcp-server

建筑

Client (with Bearer token) 
    ↓
MCP Kibana Server (/mcp endpoint)
    ↓
Kibana API

地方发展

没有Docker

  1. 安装依赖项:
pip install uv
uv sync
  1. 创建 .env 文件:
KIBANA_URL=http://localhost:5601
KIBANA_API_KEY=your-api-key-here
  1. 在stdio模式下运行 (本地开发不需要身份验证):
python -m mcp_server_kibana.server stdio

与MCP检查员一起

npx @modelcontextprotocol/inspector

然后连接到:

  • 使用Docker: http://localhost:8080/mcp (要求 Authorization: Bearer <token> 头球
  • 本地标准:使用检查器的stdio连接模式

生产部署

环境变量

变量 必填 描述
KIBANA_URL 是 您的Kibana实例URL
KIBANA_API_KEY 是 用于Kibana身份验证的API密钥
MCP_API_KEY 否 承载令牌(如果未设置,则自动生成)
LOG_LEVEL 否 日志记录级别(默认值:INFO)

部署模式

1.生产(Docker Compose):

  • 带有/mcp端点的HTTP服务器
  • 自动生成的承载令牌
  • 内置身份验证

2.发展(地方):

  • 直接输入模式(无身份验证)
  • 带有自动生成令牌的HTTP模式
  • MCP检查器兼容

3.ASGI生产:

  • 与Uvicorn/Gunicorn一起使用
  • uvicorn mcp_server_kibana.server:app
  • 全面支持ASGI中间件

安全最佳实践

  1. 使用强API密钥:令牌在启动时自动安全生成

  2. 定期旋转按键:更新 MCP_API_KEY 定期

  3. 在生产环境中使用HTTPS:使用SSL在反向代理后部署

HTTPS配置

对于生产HTTPS,部署在反向代理(nginx、Caddy等)后面,该代理处理SSL终止并将请求转发到端口8080上的MCP服务器。

客户端配置

克劳德桌面

添加到您的Claude Desktop配置中:

{
  "mcpServers": {
    "kibana": {
      "url": "http://localhost:8080/mcp",
      "headers": {
        "Authorization": "Bearer <token-from-server-logs>"
      }
    }
  }
}

游标/其他MCP客户端

配置为:

  • 端点: http://localhost:8080/mcp
  • 头球: Authorization: Bearer <token-from-server-logs>

Docker管理

常用命令

# Start services
docker compose up -d

# Stop services
docker compose down

# Restart services
docker compose restart

# View running containers
docker compose ps

# View logs
docker compose logs -f

# Rebuild and restart
docker compose up -d --build

# Remove all containers and volumes
docker compose down -v

测试

认证测试

# Test 1: No authentication (should fail with 401)
curl -v http://localhost:8080/mcp
# Expected: HTTP/1.1 401 Unauthorized

# Test 2: Valid bearer token (should succeed with 200)
curl -v -H "Authorization: Bearer <token-from-logs>" http://localhost:8080/mcp
# Expected: HTTP/1.1 200 OK

# Test 3: Invalid bearer token (should fail with 401)
curl -v -H "Authorization: Bearer wrong-key" http://localhost:8080/mcp
# Expected: HTTP/1.1 401 Unauthorized

MCP协议测试

# Initialize session (requires auth)
curl -X POST "http://localhost:8080/mcp" \
  -H "Authorization: Bearer <token-from-logs>" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}},"id":1}'

故障排除

连接被拒绝

症状: curl: (7) Failed to connect

解决方案:

  • 检查容器是否正在运行: docker compose ps
  • 验证端口8080是否未使用: lsof -i :8080 或 netstat -tuln | grep 8080
  • 检查Docker日志: docker compose logs -f
  • 重新启动服务: docker compose restart

401未经授权

症状: HTTP/1.1 401 Unauthorized

解决方案:

  • 验证 Authorization: Bearer <token> 请求中包含标头
  • 检查令牌值是否匹配 MCP_API_KEY 在 .env 文件
  • 查看服务器日志以了解身份验证失败: docker compose logs mcp-server
  • 确保令牌值中没有多余的空格

Kibana连接问题

症状:调用Kibana工具时出错

解决方案:

  • 验证 KIBANA_URL 正确且可访问
  • 测试Kibana API密钥: curl -H "Authorization: ApiKey YOUR_KEY" https://your-kibana/api/status
  • 确保 KIBANA_API_KEY 具有适当的权限
  • 检查MCP服务器日志: docker compose logs mcp-server
  • 验证从容器到Kibana的网络连接

容器无法启动

症状:集装箱立即出口

解决方案:

  • 检查日志: docker compose logs mcp-server
  • 验证中的环境变量 .env
  • 确保中没有语法错误 docker-compose.yml
  • 尝试重建: docker compose up -d --build

端口已在使用中

症状: Bind for 0.0.0.0:8080 failed: port is already allocated

解决方案:

  • 停止冲突服务: docker ps 和 docker stop <container>
  • 更改端口 docker-compose.yml (例如。, 8081:8080)
  • 使用端口终止进程: lsof -ti:8080 | xargs kill -9

ASGI生产部署

# Install production server
pip install uvicorn[standard]

# Run with Uvicorn
uvicorn mcp_server_kibana.server:app --host 0.0.0.0 --port 8080

# Run with Gunicorn
gunicorn mcp_server_kibana.server:app -k uvicorn.workers.UvicornWorker

项目结构

mcp_server_kibana/
├── src/mcp_server_kibana/
│   ├── clients/          # Kibana HTTP client
│   ├── config/           # Configuration settings
│   ├── tools/            # MCP tool implementations
│   ├── utils/            # Utility modules
│   ├── models.py         # Pydantic models
│   └── server.py         # Main server + ASGI app
├── Dockerfile            # Docker configuration
├── docker-compose.yml    # Container setup

├── .env.example         # Environment template
└── README.md            # This file

贡献

欢迎投稿!拜托:

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 提交拉取请求

许可证

Apache 2.0