mcp-trino
Trino MCP Server на Go
Высокопроизводительный сервер Model Context Protocol (MCP) для Trino, реализованный на Go. Этот проект позволяет ИИ-ассистентам беспрепятственно взаимодействовать с распределенным SQL-движком Trino через стандартизированные инструменты MCP.
Обзор
Этот проект реализует сервер Model Context Protocol (MCP) для Trino на языке Go. Он позволяет ИИ-ассистентам получать доступ к распределенному SQL-движку Trino через стандартизированные инструменты MCP.
Trino (ранее PrestoSQL) — это мощный распределенный SQL-движок, предназначенный для быстрой аналитики больших наборов данных.
Related MCP server: mcp-pprof-anaylzer
Архитектура
graph TB
subgraph "AI Clients"
CC[Claude Code]
CD[Claude Desktop]
CR[Cursor]
WS[Windsurf]
CW[ChatWise]
end
subgraph "Authentication (Optional)"
OP[OAuth Provider<br/>Okta/Google/Azure AD]
JWT[JWT Tokens]
end
subgraph "MCP Server (mcp-trino)"
HTTP[HTTP Transport<br/>/mcp endpoint]
STDIO[STDIO Transport]
AUTH[OAuth Middleware]
TOOLS[MCP Tools<br/>• execute_query<br/>• list_catalogs<br/>• list_schemas<br/>• list_tables<br/>• get_table_schema<br/>• explain_query]
end
subgraph "Data Layer"
TRINO[Trino Cluster<br/>Distributed SQL Engine]
CATALOGS[Data Sources<br/>• PostgreSQL<br/>• MySQL<br/>• S3/Hive<br/>• BigQuery<br/>• MongoDB]
end
%% Connections
CC -.->|OAuth Flow| OP
OP -.->|JWT Token| JWT
CC -->|HTTP + JWT| HTTP
CD -->|STDIO| STDIO
CR -->|HTTP + JWT| HTTP
WS -->|STDIO| STDIO
CW -->|HTTP + JWT| HTTP
HTTP --> AUTH
AUTH -->|Validated| TOOLS
STDIO --> TOOLS
TOOLS -->|SQL Queries| TRINO
TRINO --> CATALOGS
%% Styling
classDef client fill:#e1f5fe
classDef auth fill:#f3e5f5
classDef server fill:#e8f5e8
classDef data fill:#fff3e0
class CC,CD,CR,WS,CW client
class OP,JWT auth
class HTTP,STDIO,AUTH,TOOLS server
class TRINO,CATALOGS dataОсновные компоненты:
ИИ-клиенты: Различные приложения, совместимые с MCP
Аутентификация: Опциональный OAuth 2.0 с провайдерами OIDC
MCP-сервер: Сервер на базе Go с поддержкой двух видов транспорта
Режим CLI: Интерактивная SQL-оболочка для прямого доступа к Trino (подобная psql)
Уровень данных: Кластер Trino, подключающийся к нескольким источникам данных
Функции
✅ Двойной режим: Работает как MCP-сервер И как интерактивный CLI
Режим CLI: Интерактивная SQL-оболочка в стиле psql для прямого доступа к Trino
Режим MCP: Полноценный MCP-сервер для интеграции с ИИ-ассистентами
✅ Реализация MCP-сервера на Go
✅ Выполнение SQL-запросов Trino через инструменты MCP
✅ Обнаружение каталогов, схем и таблиц
✅ Поддержка Docker-контейнеров
✅ Поддержка транспорта STDIO и HTTP
✅ Аутентификация OAuth 2.1 через библиотеку oauth-mcp-proxy
4 провайдера: HMAC, Okta, Google, Azure AD
Нативный режим: Клиент обрабатывает OAuth напрямую (никаких секретов на стороне сервера)
Режим прокси: Сервер проксирует поток OAuth для простых клиентов
Готовность к продакшену: Кэширование токенов, PKCE, глубокая защита
Переиспользуемость: Библиотека OAuth доступна для любого MCP-сервера на Go
✅ Поддержка StreamableHTTP с JWT-аутентификацией (обновлено с SSE)
✅ Обратная совместимость с эндпоинтами SSE
✅ Совместимость с Cursor, Claude Desktop, Windsurf, ChatWise и любыми клиентами, поддерживающими MCP.
✅ Отслеживание личности пользователя:
Атрибуция запросов (автоматическая): Помечает запросы OAuth-пользователем через заголовки
X-Trino-Client-Tags/InfoИмперсонация пользователя (по выбору): Выполнение запросов от имени OAuth-пользователя через заголовок
X-Trino-User
Установка и быстрый старт
Установка:
# Homebrew
brew install tuannvm/mcp/mcp-trino
# Or one-liner (macOS/Linux)
curl -fsSL https://raw.githubusercontent.com/tuannvm/mcp-trino/main/install.sh | bashЗапуск (локальная разработка):
export TRINO_HOST=localhost TRINO_USER=trino
mcp-trinoДля развертывания в продакшене с OAuth см. Руководство по развертыванию и Архитектуру OAuth.
Режим CLI
mcp-trino можно использовать как интерактивный CLI, аналогичный psql или CLI Trino:
# Interactive REPL mode
mcp-trino --interactive
# Execute a query directly
mcp-trino query "SELECT * FROM my_table LIMIT 10"
# List catalogs, schemas, tables
mcp-trino catalogs
mcp-trino schemas my_catalog
mcp-trino tables my_catalog my_schema
# Describe a table
mcp-trino describe my_catalog.my_schema.my_table
# Explain a query
mcp-trino explain "SELECT COUNT(*) FROM my_table"
# Output formats
mcp-trino --format json query "SELECT 1"
mcp-trino --format csv query "SELECT 1"
mcp-trino --format table query "SELECT 1" # defaultВстроенная справка
Каждая команда имеет структурированный вывод справки, понятный для LLM:
# Main help with all commands, flags, examples, and environment variables
mcp-trino --help
# Per-subcommand help
mcp-trino query --help
mcp-trino describe --helpВывод справки следует соглашениям Unix man-страниц с разделами: NAME, SYNOPSIS, DESCRIPTION, COMMANDS, FLAGS, EXAMPLES, ENVIRONMENT и CONFIGURATION.
Коды выхода
Код | Значение |
0 | Успех |
1 | Ошибка выполнения (сбой соединения, ошибка запроса и т.д.) |
2 | Ошибка использования (неизвестная команда, неверные флаги, отсутствующие аргументы) |
Именованные профили
mcp-trino поддерживает именованные профили подключения для легкого переключения между средами Trino.
Файл конфигурации — поддерживает как YAML (~/.config/trino/config.yaml), так и JSON (~/.config/trino/config.json):
# ~/.config/trino/config.yaml
current: prod
profiles:
prod:
host: trino.example.com
port: 443
user: prod_user
password: prod_password
catalog: hive
schema: analytics
ssl:
enabled: true
insecure: false
dev:
host: localhost
port: 8080
user: trino
catalog: memory
schema: default
staging:
host: staging-trino.example.com
port: 443
user: staging_user
output:
format: tableИли аналогично в JSON:
{
"current": "prod",
"profiles": {
"prod": {
"host": "trino.example.com",
"port": 443,
"user": "prod_user",
"catalog": "hive",
"ssl": { "enabled": true }
},
"dev": {
"host": "localhost",
"port": 8080,
"user": "trino"
}
},
"output": { "format": "table" }
}Если существуют оба файла, config.json имеет приоритет. Новые конфигурации по умолчанию создаются в JSON.
Команды управления профилями:
# List all profiles
mcp-trino config profile list
# Set default profile
mcp-trino config profile use prod
# Show profile details
mcp-trino config profile show staging
# Use a specific profile (overrides config file)
mcp-trino --profile dev catalogsПриоритет конфигурации (от высшего к низшему):
Флаги CLI (
--host,--portи т.д.)Флаг
--profileПеременная окружения
TRINO_PROFILEПоле
currentв файле конфигурацииРезервный профиль
defaultПеременные окружения (
TRINO_HOSTи т.д.)
Переменные окружения (низший приоритет — переопределяются профилями и флагами):
export TRINO_HOST=trino.example.com
export TRINO_PORT=443
export TRINO_USER=myuser
export TRINO_PASSWORD=mypass
export TRINO_CATALOG=hive
export TRINO_SCHEMA=analytics
export TRINO_SSL=trueУправление секретами (рекомендуется):
Секреты загружаются исключительно из переменных окружения. Используйте CLI для секретов, чтобы внедрять их через конвейеры Unix во время запуска — приложение никогда не касается вашего хранилища:
# 1Password CLI — resolves op:// references in an env file
op run --env-file=.env -- mcp-trino
# Or inline per-variable
TRINO_PASSWORD=$(op read 'op://Engineering/Trino/password') mcp-trinoСм. docs/secrets.md для шаблонов 1Password, Vault и Kubernetes, а также для нюансов безопасности (история оболочки, список процессов и утечка переменных окружения).
Мета-команды REPL (в интерактивном режиме):
\help- Показать справку\quit,\exit,\q- Выйти из REPL\history- Показать историю команд\catalogs- Список всех каталогов\schemas [catalog]- Список схем\tables [catalog schema]- Список таблиц\describe <table>- Описание таблицы\format <table|json|csv>- Изменить формат вывода
Использование
Поддерживаемые клиенты: Claude Desktop, Claude Code, Cursor, Windsurf, ChatWise
Доступные инструменты: execute_query, list_catalogs, list_schemas, list_tables, get_table_schema, explain_query
Для интеграции с клиентами и документации по инструментам см. Руководство по интеграции и Справочник инструментов.
Конфигурация
Ключевые переменные: TRINO_HOST, TRINO_USER, TRINO_SCHEME, MCP_TRANSPORT, OAUTH_PROVIDER
Управление секретами: Внедряйте секреты через окружение процесса — mcp-trino считывает их напрямую. См. docs/secrets.md для рецептов 1Password, Vault и Kubernetes.
# 1Password (biometric-gated, zero disk writes)
op run --env-file=.env -- mcp-trino
# Vault (via vault-agent or CLI)
TRINO_PASSWORD=$(vault kv get -field=password secret/mcp-trino) mcp-trino
# Kubernetes: use standard Secret → envFrom in the Helm chart valuesКонфигурация OAuth:
# Native mode (most secure - zero server-side secrets)
export OAUTH_ENABLED=true OAUTH_MODE=native OAUTH_PROVIDER=okta
export OIDC_ISSUER=https://company.okta.com OIDC_AUDIENCE=https://mcp-server.com
# Proxy mode (centralized credential management)
export OAUTH_MODE=proxy OIDC_CLIENT_ID=app-id OIDC_CLIENT_SECRET=secret
export OAUTH_REDIRECT_URI=https://mcp-server.com/oauth/callback # Fixed mode (localhost-only)
export OAUTH_REDIRECT_URI=https://app1.com/cb,https://app2.com/cb # Allowlist mode
export JWT_SECRET=$(openssl rand -hex 32) # Required for multi-pod deploymentsОптимизация производительности:
# Focus AI on specific schemas only (10-20x performance improvement)
export TRINO_ALLOWED_SCHEMAS="hive.analytics,hive.marts,hive.reporting"Отслеживание личности пользователя:
# Query Attribution is AUTOMATIC when OAuth is enabled
# Queries are tagged with X-Trino-Client-Tags and X-Trino-Client-Info headers
# For full impersonation (Trino enforces user permissions):
export TRINO_ENABLE_IMPERSONATION=true
export TRINO_IMPERSONATION_FIELD=email # Options: username, email, subjectДля полной конфигурации см. Руководство по развертыванию, Руководство по OAuth, Руководство по спискам разрешений и Руководство по имперсонации.
Реализация OAuth
mcp-trino использует oauth-mcp-proxy — автономную библиотеку OAuth 2.1 для MCP-серверов на Go.
Почему отдельная библиотека?
✅ Переиспользуемость для любого MCP-сервера на Go
✅ Независимое тестирование и версионирование
✅ Специализированная документация и примеры
✅ Реализация OAuth, поддерживаемая сообществом
Для деталей OAuth:
Документация oauth-mcp-proxy - Полное руководство по OAuth
Руководства по настройке провайдеров - Okta, Google, Azure AD
Лучшие практики безопасности - Безопасность в продакшене
Вклад в проект
Мы приветствуем ваш вклад! Пожалуйста, не стесняйтесь присылать Pull Request.
Лицензия
Этот проект лицензирован по лицензии MIT — подробности см. в файле LICENSE.
Связанные проекты
oauth-mcp-proxy - Библиотека аутентификации OAuth 2.1, используемая mcp-trino (переиспользуема для любого MCP-сервера на Go)
CI/CD и релизы
Этот проект использует GitHub Actions для непрерывной интеграции и GoReleaser для автоматизированных релизов.
Проверки непрерывной интеграции
Наш конвейер CI выполняет следующие проверки для всех PR и коммитов в основную ветку:
Качество кода
Линтинг: Использование golangci-lint для проверки распространенных проблем кода и нарушений стиля
Проверка модулей Go: Обеспечение правильного ведения go.mod и go.sum
Форматирование: Проверка того, что код правильно отформатирован с помощью gofmt
Безопасность
Сканирование уязвимостей: Использование govulncheck для проверки известных уязвимостей в зависимостях
Сканирование зависимостей: Использование Trivy для поиска уязвимостей в зависимостях (CRITICAL, HIGH и MEDIUM)
Генерация SBOM: Создание спецификации состава программного обеспечения (SBOM) для отслеживания зависимостей
Происхождение SLSA: Создание проверяемого происхождения сборки для безопасности цепочки поставок
Тестирование
Модульные тесты: Запуск тестов с обнаружением состояний гонки (race detection) и отчетами о покрытии кода
Проверка сборки: Обеспечение успешной сборки кодовой базы
Безопасность CI/CD
Принцип наименьших привилегий: Рабочие процессы выполняются с минимально необходимыми разрешениями
Закрепленные версии: Все GitHub Actions используют конкретные версии для предотвращения атак на цепочку поставок
Обновления зависимостей: Автоматизированные обновления зависимостей через Dependabot
Процесс релиза
Когда изменения объединяются в основную ветку:
Запускаются проверки CI для подтверждения качества кода и безопасности
В случае успеха автоматически создается новый релиз с:
Семантическим версионированием на основе сообщений коммитов
Сборками бинарных файлов для нескольких платформ
Публикацией Docker-образа в GitHub Container Registry
Аттестацией SBOM и происхождения
This server cannot be deployed
Maintenance
Related MCP Connectors
A Model Context Protocol server for Wix AI tools
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables listing and querying Trino tables using Python, providing access to data resources through the Model-Control-Protocol.18MIT
- AlicenseNot gradedqualityCmaintenanceThis is a Model Context Protocol (MCP) server implemented in Go, providing a tool to analyze Go pprof performance profiles.50MIT
- AlicenseBqualityCmaintenanceA Model Context Protocol server that provides seamless integration with Trino and Iceberg, enabling data exploration, querying, and table maintenance through a standard interface.2225Apache 2.0
- AlicenseNot gradedqualityCmaintenanceThe implementation of Model Context Protocol (MCP) server for VictoriaMetrics236Apache 2.0