Grafana-Loki MCP Server について
Grafana-Loki MCP Server は、FastMCP で構築された MCP サーバーで、Grafana API 経由で Loki のログを照会します。MCP クライアントからログを検索・確認したい開発者や運用担当者を対象としています。
主な機能
- 01Grafana API 経由で Loki ログを照会
- 02Loki のラベルとラベル値の取得
- 03text、JSON、markdown 形式での結果出力
- 04stdio と SSE のトランスポートプロトコル対応
活用シーン
- 01MCP クライアントからアプリケーションログを検索
- 02トラブルシューティング時にラベル別のログ値を確認
- 03ログ照会結果を読みやすい形式に整形
MCP 対応
本プロジェクトは MCP サーバーであり、query_loki、get_loki_labels、get_loki_label_values、format_loki_results のツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Grafana-Loki MCP サーバー
Grafana から Loki のログをクエリできる FastMCP サーバーです。
MCP サーバーの設定
{
"mcpServers": {
"loki": {
"command": "uvx",
"args": [
"grafana-loki-mcp",
"-u",
"GRAFANA_URL",
"-k",
"GRAFANA_API_KEY"
]
}
}
}
GRAFANA_URL:Grafana インスタンスの URLGRAFANA_API_KEY:適切な権限を持つ Grafana API キー
機能
- Grafana API を通じた Loki ログのクエリ
- Loki のラベルとラベル値の取得
- クエリ結果をさまざまな形式(テキスト、JSON、Markdown)で整形
- stdio と SSE の両方のトランスポートプロトコルに対応
要件
- Python 3.10+
- FastMCP
- Requests
インストール
pip を使用する場合
pip install grafana-loki-mcp
開発環境のセットアップ
- このリポジトリをクローンします
- 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 インスタンスの URLGRAFANA_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 タイムスタンプ、または「now-1h」のような Grafana 形式の相対時刻。デフォルト:1 時間前)end:終了時刻(ISO 形式、Unix タイムスタンプ、または「now」のような Grafana 形式の相対時刻。デフォルト:現在)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 ファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。