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 и происхождения

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
1wRelease cycle
19Releases (12mo)
Commit activity
Issues opened vs closed

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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