mcpField
G
Grafana-Loki MCP Server

Grafana-Loki MCP Server

本地服务
github.com/tumf开发工具2942 周前更新

关于 Grafana-Loki MCP Server

Grafana-Loki MCP Server 是一个基于 FastMCP 的 MCP 服务,用于通过 Grafana API 查询 Loki 日志。适合需要在 MCP 客户端中检索和查看日志的开发与运维人员。

主要功能

  1. 01通过 Grafana API 查询 Loki 日志
  2. 02获取 Loki 标签及标签值
  3. 03以 text、JSON 或 markdown 格式输出结果
  4. 04支持 stdio 与 SSE 传输协议

适用场景

  1. 01在 MCP 客户端中检索应用日志
  2. 02排查问题时按标签查看日志值
  3. 03将日志查询结果整理为可读格式

MCP 相关

该项目是 MCP 服务,向 MCP 客户端暴露 query_loki、get_loki_labels、get_loki_label_values 与 format_loki_results 等工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Grafana-Loki MCP 服务

Test PyPI version codecov License: MIT

一个 FastMCP 服务,可通过 Grafana 查询 Loki 日志。

MCP 服务设置

{
  "mcpServers": {
    "loki": {
      "command": "uvx",
      "args": [
        "grafana-loki-mcp",
        "-u",
        "GRAFANA_URL",
        "-k",
        "GRAFANA_API_KEY"
      ]
    }
  }
}
  • GRAFANA_URL:Grafana 实例的 URL
  • GRAFANA_API_KEY:具有相应权限的 Grafana API 密钥

功能

  • 通过 Grafana API 查询 Loki 日志
  • 获取 Loki 标签和标签值
  • 以不同格式(文本、JSON、Markdown)格式化查询结果
  • 支持 stdio 和 SSE 传输协议

要求

  • Python 3.10+
  • FastMCP
  • Requests

安装

使用 pip
pip install grafana-loki-mcp
开发环境设置
  1. 克隆此仓库
  2. 使用 uv 安装依赖:
# Install uv
pip install uv

# Create and activate virtual environment
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install dependencies
uv pip install -e ".[dev]"

用法

环境变量

设置以下环境变量:

  • GRAFANA_URL:Grafana 实例的 URL
  • GRAFANA_API_KEY:具有相应权限的 Grafana API 密钥
命令行参数

也可以通过命令行参数提供这些值:

grafana-loki-mcp -u https://your-grafana-instance.com -k your-api-key

其他选项:

  • --transport:要使用的传输协议(stdio 或 sse,默认值:stdio)
运行服务
# Using environment variables
export GRAFANA_URL=https://your-grafana-instance.com
export GRAFANA_API_KEY=your-api-key
grafana-loki-mcp

# Using command line arguments
grafana-loki-mcp -u https://your-grafana-instance.com -k your-api-key

# Using SSE transport
grafana-loki-mcp --transport sse

开发

测试

运行测试套件:

pytest

运行并生成覆盖率报告:

pytest --cov=. --cov-report=term
代码检查与格式化
# Run ruff linter
ruff check .

# Run black formatter
black .

# Run type checking
mypy .

可用工具

query_loki

通过 Grafana 查询 Loki 日志。

参数:

  • query:Loki 查询字符串
  • start:开始时间(ISO 格式、Unix 时间戳或 Grafana 风格的相对时间,如 'now-1h',默认值:1 小时前)
  • end:结束时间(ISO 格式、Unix 时间戳或 Grafana 风格的相对时间,如 'now',默认值:现在)
  • limit:要返回的最大日志行数(默认值:100)
  • direction:查询方向('forward' 或 'backward',默认值:'backward')
  • max_per_line:每行日志的最大字符数(0 表示不限制,默认值:100)
get_loki_labels

获取 Loki 中的所有标签名称。

get_loki_label_values

获取 Loki 中指定标签的值。

参数:

  • label:标签名称
format_loki_results

以更易读的格式格式化 Loki 查询结果。

参数:

  • results:来自 query_loki 的 Loki 查询结果
  • format_type:输出格式('text'、'json' 或 'markdown',默认值:'text')
  • max_per_line:每行日志的最大字符数(0 表示不限制,默认值:0)

使用示例

# Example client code
from mcp.client import Client

async with Client() as client:
    # Query Loki logs with max_per_line limit
    results = await client.call_tool(
        "query_loki",
        {
            "query": '{app="my-app"} |= "error"',
            "limit": 50,
            "max_per_line": 100,  # Limit log lines to 100 characters
            "start": "now-6h",    # Grafana-style relative time: 6 hours ago
            "end": "now"          # Current time
        }
    )

    # Format the results
    formatted = await client.call_tool(
        "format_loki_results",
        {
            "results": results,
            "format_type": "markdown",
            "max_per_line": 100  # Can also limit at formatting time
        }
    )

    print(formatted)

许可证

本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。