Skip to main content
Glama
tuannvm

mcp-trino

by tuannvm

Trino MCP Server на Go

Высокопроизводительный сервер Model Context Protocol (MCP) для Trino, реализованный на Go. Этот проект позволяет ИИ-ассистентам беспрепятственно взаимодействовать с распределенным SQL-движком Trino через стандартизированные инструменты MCP.

GitHub Workflow Status Go Version Trivy Scan SLSA 3 Go Report Card Go Reference Docker Image GitHub Release License: MIT

Trust Score

Обзор

Этот проект реализует сервер 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

Приоритет конфигурации (от высшего к низшему):

  1. Флаги CLI (--host, --port и т.д.)

  2. Флаг --profile

  3. Переменная окружения TRINO_PROFILE

  4. Поле current в файле конфигурации

  5. Резервный профиль default

  6. Переменные окружения (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:

Вклад в проект

Мы приветствуем ваш вклад! Пожалуйста, не стесняйтесь присылать 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

Процесс релиза

Когда изменения объединяются в основную ветку:

  1. Запускаются проверки CI для подтверждения качества кода и безопасности

  2. В случае успеха автоматически создается новый релиз с:

    • Семантическим версионированием на основе сообщений коммитов

    • Сборками бинарных файлов для нескольких платформ

    • Публикацией Docker-образа в GitHub Container Registry

    • Аттестацией SBOM и происхождения

Related MCP Connectors

Related MCP Servers