GreptimeDB
официальныйПредоставляет AI-ассистентам безопасный и структурированный способ исследования и анализа данных в GreptimeDB.
Что можно делать с GreptimeDB MCP?
- Выполнение SQL-запросов — Запрашивайте метрики, логи или трейсы через
execute_sqlс выводом в CSV, JSON или Markdown и ограничением количества строк. - Анализ временных рядов — Используйте
execute_tqlдля запросов, совместимых с PromQL, илиquery_rangeдля агрегаций по временным окнам. - Изучение схем таблиц — Получайте типы столбцов, примеры строк и рекомендации по запросам через
describe_table. - Оптимизация производительности запросов — Запрашивайте планы выполнения с помощью
explain_query, при необходимости добавляя статистику времени выполнения или метрики сканирования по партициям. - Управление конвейерами — Создавайте, тестируйте, просматривайте или удаляйте конвейеры обработки данных с использованием YAML-конфигураций.
- Работа с дашбордами — Просматривайте, создавайте, обновляйте или удаляйте определения дашбордов Perses.
Документация
greptimedb-mcp-server
Сервер Model Context Protocol (MCP) для GreptimeDB — опенсорсной базы данных для наблюдаемости, которая обрабатывает метрики, логи и трейсы в одном движке.
Позволяет AI-ассистентам выполнять запросы и анализировать GreptimeDB с помощью SQL, TQL (совместимого с PromQL) и RANGE-запросов, со встроенными функциями безопасности, такими как принудительный режим только для чтения и маскирование данных.
Быстрый старт
# Install
pip install greptimedb-mcp-server
# Run (connects to localhost:4002 by default)
greptimedb-mcp-server --host localhost --database public
Для Claude Desktop добавьте это в вашу конфигурацию (~/Library/Application Support/Claude/claude_desktop_config.json на macOS):
{
"mcpServers": {
"greptimedb": {
"command": "greptimedb-mcp-server",
"args": ["--host", "localhost", "--database", "public"]
}
}
}
Возможности
Инструменты
| Инструмент | Описание |
|---|---|
execute_sql | Выполнение SQL-запросов с опциями формата (csv/json/markdown) и лимита |
execute_tql | Выполнение TQL-запросов (совместимых с PromQL) для анализа временных рядов |
query_range | Выполнение запросов агрегации по временным окнам с синтаксисом RANGE/ALIGN |
search_table_semantics | Поиск таблиц по концепции наблюдаемости, ранжированных по совпавшим терминам; ищет по именам таблиц, семантическим опциям и объявлениям сущностей |
query_semantic_graph | Запрос к семантическому графу: summary (что он содержит), entities (узлы), relationships (рёбра) за требуемое временное окно |
describe_table | Просмотр профиля таблицы: схема, семантические метаданные, последние примеры строк и рекомендации по запросам |
explain_query | Анализ планов выполнения SQL или TQL-запросов (analyze=true для статистики выполнения; добавьте verbose=true вместе с analyze=true для метрик сканирования по партициям и счётчиков обрезки индексов) |
health_check | Проверка статуса подключения к базе данных и версии сервера |
search_table_semantics и семантические метаданные в describe_table читают information_schema.table_semantics. Таблица появляется там, когда она содержит опцию greptime.semantic.* или встроенное соглашение выводит для неё объявление сущности; другие таблицы отсутствуют. Сервер читает список столбцов представления один раз за процесс и выбирает только те столбцы, которые оно предоставляет. 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_pipeline | Создание нового конвейера с YAML-конфигурацией |
dryrun_pipeline | Тестирование конвейера с образцами данных без записи в базу данных |
delete_pipeline | Удаление конкретной версии конвейера |
Управление дашбордами
| Инструмент | Описание |
|---|---|
list_dashboards | Список всех определений дашбордов Perses |
create_dashboard | Создание или обновление определения дашборда Perses |
delete_dashboard | Удаление определения дашборда |
Ресурсы и подсказки
- Ресурсы: Просмотр таблиц через URI
greptime://<table>/data - Подсказки: Встроенные шаблоны 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. Для развёртывания, конфигурации сервера, протоколов записи, синтаксиса конвейеров, проектирования схем и диагностики производительности направьте ассистента к индексу навыков GreptimeDB по адресу https://docs.greptime.com/SKILL.md.
Конфигурация
Переменные окружения
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)
Аргументы командной строки
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-ребinding
По умолчанию защита от DNS-ребinding отключена для совместимости с прокси, шлюзами и сервисами 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
Режим записи (отключён по умолчанию)
Сервер по умолчанию только для чтения. Для локальной разработки или тестирования вы можете
разрешить запись/деструктивный SQL (DDL/DML, такие как CREATE, DROP, ALTER, INSERT,
UPDATE, DELETE) через инструмент execute_sql, включив режим записи:
# 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.
Благодарности
Вдохновлено: