GreptimeDB

公式

AIアシスタントに、GreptimeDB内のデータを安全かつ構造化された方法で探索・分析する手段を提供します。

GreptimeDB MCPで何ができますか?

  • SQLクエリの実行 — execute_sqlを使用して、CSV、JSON、またはMarkdown形式の出力と行数制限を指定し、メトリクス、ログ、またはトレースを取得します。
  • 時系列データの分析 — PromQL互換のクエリにはexecute_tqlを、時間ウィンドウの集計にはquery_rangeを使用します。
  • テーブルスキーマの調査 — describe_tableを通じて、列タイプ、サンプル行、およびクエリのガイダンスを取得します。
  • クエリパフォーマンスの最適化 — explain_queryで実行計画を要求し、必要に応じてランタイム統計やパーティションごとのスキャンメトリクスを追加します。
  • パイプラインの管理 — YAML設定を使用して、データ処理パイプラインの作成、テスト、一覧表示、または削除を行います。
  • ダッシュボードの処理 — Persesダッシュボード定義の一覧表示、作成、更新、または削除を行います。

ドキュメント

greptimedb-mcp-server

PyPI - Version build workflow MCP Registry MIT License

GreptimeDB 用の Model Context Protocol (MCP) サーバーです。メトリクス、ログ、トレースを単一のエンジンで処理するオープンソースの可観測性データベースです。

AI アシスタントが SQL、TQL(PromQL 互換)、RANGE クエリを使用して GreptimeDB をクエリおよび分析できるようにし、読み取り専用の強制やデータマスキングなどの組み込みのセキュリティ機能を備えています。

クイックスタート

# Install
pip install greptimedb-mcp-server

# Run (connects to localhost:4002 by default)
greptimedb-mcp-server --host localhost --database public

Claude Desktop の場合は、設定にこれを追加します(macOS では ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "greptimedb": {
      "command": "greptimedb-mcp-server",
      "args": ["--host", "localhost", "--database", "public"]
    }
  }
}

機能

ツール

ツール説明
execute_sqlフォーマット(csv/json/markdown)と制限オプションを指定して SQL クエリを実行します
execute_tql時系列分析用に TQL(PromQL 互換)クエリを実行します
query_rangeRANGE/ALIGN 構文を使用して時間枠集計クエリを実行します
search_table_semantics可観測性の概念でテーブルを検索し、一致した用語でランク付けします。テーブル名、セマンティックオプション、エンティティ宣言を検索します
query_semantic_graphセマンティックグラフをクエリします:summary(内容)、entities(ノード)、relationships(エッジ)を必須の時間枠にわたって取得します
describe_tableテーブルプロファイルを検査します:スキーマ、セマンティックメタデータ、最新のサンプル行、クエリガイダンス
explain_querySQL または TQL クエリの実行計画を分析します(analyze=true はランタイム統計用。verbose=true を analyze=true と併用すると、パーティションごとのスキャンメトリクスとインデックスプルーニングカウンタを取得できます)
health_checkデータベースの接続ステータスとサーバーバージョンを確認します

search_table_semantics と describe_table 内のセマンティックメタデータは information_schema.table_semantics を読み取ります。テーブルが greptime.semantic.* オプションを持つか、組み込みの規約がエンティティ宣言を導出する場合にのみテーブルが表示され、その他のテーブルは表示されません。サーバーはビューの列リストをプロセスごとに 1 回読み取り、公開する列のみを選択します。entity_declarations には GreptimeDB 1.3 が必要です。それ以前のバージョンでは、空の宣言セットとしてではなく、欠落した列として報告されます。

query_semantic_graph は greptime_private.semantic_entities と greptime_private.semantic_relationships を読み取ります。これらには GreptimeDB 1.3 が必要です。起動時にサーバーは両方のビューが存在し、読み取る列を持ち、接続されたアカウントで読み取り可能であることを確認します。それらがない場合、ツールは提供されず、理由がログに記録されます。その時間枠は必須で半開区間であり、[start_time, end_time) は observed_at を超え、行はそのウィンドウ内の 60 秒の観測バケット全体で集計されます。

パイプライン管理

ツール説明
list_pipelinesすべてのパイプラインを一覧表示するか、特定のパイプラインの詳細を取得します
create_pipelineYAML 設定で新しいパイプラインを作成します
dryrun_pipelineデータベースに書き込まずにサンプルデータでパイプラインをテストします
delete_pipelineパイプラインの特定のバージョンを削除します

ダッシュボード管理

ツール説明
list_dashboardsすべての Perses ダッシュボード定義を一覧表示します
create_dashboardPerses ダッシュボード定義を作成または更新します
delete_dashboardダッシュボード定義を削除します

リソースとプロンプト

  • リソース: greptime://<table>/data URI でテーブルを参照します
  • プロンプト: 一般的なタスク用の組み込み Jinja テンプレート — pipeline_creator、log_pipeline、metrics_analysis、promql_analysis、trace_analysis、table_operation、schema_design_advisor、observability_correlation、ingestion_troubleshooting、query_performance_tuning

LLM 統合とプロンプトの使用法については、docs/llm-instructions.md を参照してください。

これらのツールは、既存の GreptimeDB でのデータのクエリと管理を対象としています。デプロイメント、サーバー設定、書き込みプロトコル、パイプライン構文、スキーマ設計、パフォーマンス診断については、アシスタントを https://docs.greptime.com/SKILL.md の GreptimeDB スキルインデックスに誘導してください。

設定

環境変数

GREPTIMEDB_HOST=localhost      # Database host
GREPTIMEDB_PORT=4002           # MySQL protocol port (default: 4002)
GREPTIMEDB_USER=root           # Database user
GREPTIMEDB_PASSWORD=           # Database password
GREPTIMEDB_DATABASE=public     # Database name
GREPTIMEDB_TIMEZONE=UTC        # Session timezone

# Optional
GREPTIMEDB_HTTP_PORT=4000      # HTTP API port for pipeline/dashboard management
GREPTIMEDB_HTTP_PROTOCOL=http  # HTTP protocol (http/https)
GREPTIMEDB_POOL_SIZE=5         # Connection pool size
GREPTIMEDB_MASK_ENABLED=true   # Enable sensitive data masking
GREPTIMEDB_MASK_PATTERNS=      # Additional patterns (comma-separated)
GREPTIMEDB_AUDIT_ENABLED=true  # Enable audit logging
GREPTIMEDB_ALLOW_WRITE=false   # Allow write/DDL via execute_sql (DANGEROUS, local/test only)

# Transport (for HTTP server mode)
GREPTIMEDB_TRANSPORT=stdio     # stdio, sse, or streamable-http
GREPTIMEDB_LISTEN_HOST=0.0.0.0 # HTTP server bind host
GREPTIMEDB_LISTEN_PORT=8080    # HTTP server bind port
GREPTIMEDB_ALLOWED_HOSTS=      # DNS rebinding protection (comma-separated)
GREPTIMEDB_ALLOWED_ORIGINS=    # CORS allowed origins (comma-separated)

CLI 引数

greptimedb-mcp-server \
  --host localhost \
  --port 4002 \
  --database public \
  --user root \
  --password "" \
  --timezone UTC \
  --pool-size 5 \
  --mask-enabled true \
  --allow-write false \
  --transport stdio

HTTP サーバーモード

コンテナ化または Kubernetes デプロイメントの場合:

# Streamable HTTP (recommended for production)
greptimedb-mcp-server --transport streamable-http --listen-port 8080

# SSE mode (legacy)
greptimedb-mcp-server --transport sse --listen-port 3000

DNS リバインディング保護

デフォルトでは、DNS リバインディング保護はプロキシ、ゲートウェイ、Kubernetes サービスとの互換性のために無効になっています。有効にするには、--allowed-hosts を使用します:

# Enable DNS rebinding protection with allowed hosts
greptimedb-mcp-server --transport streamable-http \
  --allowed-hosts "localhost:*,127.0.0.1:*,my-service.namespace:*"

# With custom allowed origins for CORS
greptimedb-mcp-server --transport streamable-http \
  --allowed-hosts "my-service.namespace:*" \
  --allowed-origins "http://localhost:*,https://my-app.example.com"

# Or via environment variables
GREPTIMEDB_ALLOWED_HOSTS="localhost:*,my-service.namespace:*" \
GREPTIMEDB_ALLOWED_ORIGINS="http://localhost:*" \
  greptimedb-mcp-server --transport streamable-http

421 Invalid Host Header エラーが発生した場合は、保護を無効にするか(デフォルト)、ホストを許可リストに追加してください。

セキュリティ

読み取り専用データベースユーザー(推奨)

静的ユーザープロバイダー を使用して GreptimeDB に読み取り専用ユーザーを作成します:

mcp_readonly:readonly=your_secure_password

アプリケーションレベルのセキュリティゲート

すべてのクエリはセキュリティゲートを通過します:

  • ブロック: DROP、DELETE、TRUNCATE、UPDATE、INSERT、ALTER、CREATE、GRANT、REVOKE、EXEC、LOAD、COPY
  • ブロック: エンコードされたバイパス試行(hex、UNHEX、CHAR)
  • 許可: SELECT、SHOW、DESCRIBE、TQL、EXPLAIN、UNION

書き込みモード(デフォルトで無効)

サーバーはデフォルトで読み取り専用です。ローカル開発またはテスト用に、execute_sql ツールを介して書き込み/破壊的 SQL(CREATE、DROP、ALTER、INSERT、UPDATE、DELETE などの DDL/DML)を許可できます。書き込みモードを有効にします:

# Environment variable
GREPTIMEDB_ALLOW_WRITE=true greptimedb-mcp-server

# Or CLI argument
greptimedb-mcp-server --allow-write true

有効にすると、execute_sql に対してセキュリティゲートはバイパスされ、サーバーは起動時に警告をログに記録します。

⚠️ 危険: これにより、AI アシスタントがデータベースに対して破壊的なステートメントを実行できるようになります。本番データに対して有効にしないでください。読み取りアクセスのみが必要な場合は、読み取り専用データベースユーザーと組み合わせてください。

データマスキング

機密列は、列名パターンに基づいて自動的にマスクされます(******):

  • 認証: password、secret、token、api_key、credential
  • 財務: credit_card、cvv、bank_account
  • 個人: ssn、id_card、passport

カスタムパターンを追加するには --mask-patterns phone,email で設定します。

監査ログ

すべてのツール呼び出しがログに記録されます:

2025-12-10 10:30:45 - greptimedb_mcp_server.audit - INFO - [AUDIT] execute_sql | query="SELECT * FROM cpu LIMIT 10" | success=True | duration_ms=45.2

--audit-enabled false で無効にします。

開発

# Clone and setup
git clone https://github.com/GreptimeTeam/greptimedb-mcp-server.git
cd greptimedb-mcp-server
uv venv && source .venv/bin/activate
uv sync

# Run tests
pytest

# Format & lint
uv run black .
uv run flake8 src

# Debug with MCP Inspector
npx @modelcontextprotocol/inspector uv --directory . run -m greptimedb_mcp_server.server

ライセンス

MIT ライセンス - LICENSE.md を参照してください。

謝辞

以下に触発されました: