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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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 gradedqualityDmaintenanceA Model Context Protocol (MCP) server that supports STDIO, SSE and Streamable HTTP protocols for AI model interactions.131MIT
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…
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tuannvm/mcp-trino'
If you have feedback or need assistance with the MCP directory API, please join our Discord server