GreptimeDB
公式AIアシスタントに、GreptimeDB内のデータを安全かつ構造化された方法で探索・分析する手段を提供します。
GreptimeDB MCPで何ができますか?
- SQLクエリの実行 —
execute_sqlを使用してデータ取得を依頼し、形式や行数制限のオプションを指定できます。schema.tableを使用したクロスデータベース読み取りも可能です。 - 時系列分析の実行 — PromQL互換のクエリには
execute_tqlを、RANGE/ALIGN構文を使用した時間ウィンドウ集計にはquery_rangeを使用します。 - テーブル構造の調査 —
describe_tableを使用してスキーマ、セマンティックメタデータ、サンプル行、クエリガイダンスを取得するか、search_table_semanticsを使用して可観測性の概念でテーブルを検索します。 - クエリパフォーマンスの分析 —
explain_queryを使用してSQLまたはTQLの実行計画を要求し、オプションでランタイム統計やパーティションごとのスキャンメトリクスも取得できます。 - パイプラインとダッシュボードの管理 — 専用の管理ツールを使用して、パイプラインとPersesダッシュボードの一覧表示、作成、テスト、削除ができます。
ドキュメント
greptimedb-mcp-server
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_range | RANGE/ALIGN構文を使用して時間ウィンドウ集計クエリを実行 |
search_table_semantics | 可観測性の概念でテーブルを検索し、一致した用語でランク付け。テーブル名、セマンティックオプション、エンティティ宣言を検索します。schema は検索するデータベースを選択します |
query_semantic_graph | セマンティックグラフをクエリ: summary(内容)、entities(ノード)、relationships(エッジ)を必須の時間ウィンドウにわたって取得 |
describe_table | テーブルプロファイルを検査: スキーマ、セマンティックメタデータ、最新のサンプル行、クエリガイダンス |
explain_query | SQLまたはTQLクエリ実行プランを分析(analyze=true はランタイム統計用。analyze=true と併せて verbose=true を追加すると、パーティションごとのスキャンメトリクスとインデックスプルーニングカウンターを取得) |
health_check | データベース接続ステータスとサーバーバージョンを確認 |
search_table_semantics と describe_table のセマンティックメタデータは information_schema.table_semantics を読み取ります。テーブルが greptime.semantic.* オプションを持つか、組み込みの規約がエンティティ宣言を導出する場合にのみそこに表示され、その他のテーブルは表示されません。サーバーはビューの列リストをプロセスごとに1回読み取り、公開する列のみを選択します。entity_declarations にはGreptimeDB 1.3が必要です。それ以前のバージョンでは、空の宣言セットとしてではなく、欠落した列として報告されます。
ツールの結果は GREPTIMEDB_MAX_RESULT_BYTES(デフォルト1048576、つまり1 MiB)によって制限されます。予算を超えるクエリ結果は行数が減り、truncated と truncation_reason で報告されます。削除する行がない結果は、最後に通知を付けて切り詰められます。この予算は、消費するには大きすぎる結果に対する最終防衛線であるため、MCPクライアントがその前に結果を拒否する場合は、予算を引き下げてください。
クロスデータベースクエリ
サーバーは1つのデータベースに接続しますが、読み取りはそれに制限されません:
| ツール | 別のデータベースに到達する方法 |
|---|---|
execute_sql、query_range、describe_table | テーブルを schema.table として修飾 |
execute_tql | metric{__schema__="other_db"}。これは = のみを受け入れます |
search_table_semantics | schema を渡す |
query_semantic_graph | すでにカタログ全体を対象としているため、スコープ指定は不要 |
接続されたアカウントには、ターゲットデータベースの読み取り権限が必要です。それらを一覧表示するには SHOW DATABASES を使用します。
query_semantic_graph は greptime_private.semantic_entities と greptime_private.semantic_relationships を読み取ります。これらにはGreptimeDB 1.3が必要です。起動時にサーバーは両方のビューが存在し、読み取る列を持ち、接続されたアカウントが読み取り可能であることを確認します。それらがない場合、ツールは提供されず、理由がログに記録されます。その時間ウィンドウは必須で半開区間であり、observed_at にわたる [start_time, end_time) であり、行はそのウィンドウ内の60秒の観測バケット全体で集計されます。
パイプライン管理
| ツール | 説明 |
|---|---|
list_pipelines | すべてのパイプラインを一覧表示するか、特定のパイプラインの詳細を取得 |
create_pipeline | YAML設定で新しいパイプラインを作成 |
dryrun_pipeline | データベースに書き込まずにサンプルデータでパイプラインをテスト |
delete_pipeline | パイプラインの特定のバージョンを削除 |
ダッシュボード管理
| ツール | 説明 |
|---|---|
list_dashboards | すべてのPersesダッシュボード定義を一覧表示 |
create_dashboard | Persesダッシュボード定義を作成または更新 |
delete_dashboard | ダッシュボード定義を削除 |
リソースとプロンプト
- リソース:
greptime://<table>/dataURIを介してテーブルを参照 - プロンプト: 一般的なタスク用の組み込み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 writes: DDL/DML plus pipeline and dashboard changes (DANGEROUS, local/test only)
GREPTIMEDB_MAX_RESULT_BYTES=1048576 # Byte budget for a single tool result (1 MiB)
# 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)create_pipeline、delete_pipeline、create_dashboard、delete_dashboard
# Environment variable
GREPTIMEDB_ALLOW_WRITE=true greptimedb-mcp-server
# Or CLI argument
greptimedb-mcp-server --allow-write true
有効にすると、execute_sql に対してセキュリティゲートはバイパスされ、サーバーは起動時に警告をログに記録します。書き込みモードがオフの場合、これら4つのツールはサーバーに接続せずにエラーを返します。list_pipelines、list_dashboards、dryrun_pipeline は読み取り専用で、引き続き利用可能です。
⚠️ 危険: これにより、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 を参照してください。
謝辞
以下に触発されています: