Skip to main content
Glama
tuannvm

mcp-trino

by tuannvm

Trino MCP Server (Go実装)

Goで実装された、Trino向けの高性能なModel Context Protocol (MCP) サーバーです。本プロジェクトにより、AIアシスタントが標準化されたMCPツールを通じて、Trinoの分散SQLクエリエンジンとシームレスに連携できるようになります。

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

Trust Score

概要

本プロジェクトは、Goで実装されたTrino用Model Context Protocol (MCP) サーバーです。AIアシスタントが標準化されたMCPツールを通じて、Trinoの分散SQLクエリエンジンにアクセスできるようにします。

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

主要コンポーネント:

  • AIクライアント: 各種MCP互換アプリケーション

  • 認証: OIDCプロバイダーを使用したオプションのOAuth 2.0

  • MCPサーバー: デュアルトランスポートをサポートするGoベースのサーバー

  • CLIモード: Trinoへ直接アクセスするための対話型SQLシェル (psql風)

  • データレイヤー: 複数のデータソースに接続するTrinoクラスター

特徴

  • ✅ デュアルモード: MCPサーバーおよび対話型CLIの両方として動作

    • CLIモード: Trinoへ直接アクセスするためのpsql風対話型SQLシェル

    • MCPモード: AIアシスタント統合のためのフル機能MCPサーバー

  • ✅ GoによるMCPサーバー実装

  • ✅ MCPツールを通じたTrino SQLクエリの実行

  • ✅ カタログ、スキーマ、テーブルの探索

  • ✅ Dockerコンテナサポート

  • ✅ STDIOおよびHTTPトランスポートの両方をサポート

  • ✅ oauth-mcp-proxy ライブラリによるOAuth 2.1認証

    • 4つのプロバイダー: HMAC, Okta, Google, Azure AD

    • ネイティブモード: クライアントが直接OAuthを処理 (サーバー側にシークレット不要)

    • プロキシモード: サーバーが単純なクライアントのためにOAuthフローをプロキシ

    • 本番環境対応: トークンキャッシュ、PKCE、多層防御セキュリティ

    • 再利用可能: あらゆるGo MCPサーバーで利用可能なOAuthライブラリ

  • ✅ JWT認証付きStreamableHTTPサポート (SSEからアップグレード)

  • ✅ SSEエンドポイントとの後方互換性

  • ✅ Cursor, Claude Desktop, Windsurf, ChatWise、およびあらゆるMCP互換クライアントと互換性あり

  • ✅ ユーザーID追跡:

    • クエリ属性付け (自動): X-Trino-Client-Tags/Info ヘッダーを介してOAuthユーザーでクエリにタグ付け

    • ユーザーなりすまし (オプトイン): X-Trino-User ヘッダーを介してOAuthユーザーとしてクエリを実行

インストールとクイックスタート

インストール:

# 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は、psqlやTrino CLIと同様の対話型CLIとして使用できます:

# 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

ヘルプ出力は、NAME、SYNOPSIS、DESCRIPTION、COMMANDS、FLAGS、EXAMPLES、ENVIRONMENT、CONFIGURATIONといったセクションを持つUnix manページの慣習に従っています。

終了コード

コード

意味

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

シークレット管理 (推奨):

シークレットは環境変数からのみ読み込まれます。起動時にUnixパイプを使用してシークレットCLIから注入してください。アプリがVaultに直接触れることはありません:

# 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

1Password、Vault、Kubernetesのパターンや、セキュリティ上の注意点 (シェル履歴、プロセスリスト、環境変数の漏洩) については、docs/secrets.mdを参照してください。

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はそれらを直接読み取ります。1Password、Vault、Kubernetesのレシピについてはdocs/secrets.mdを参照してください。

# 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"

ユーザーID追跡:

# 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ガイド、許可リストガイド、およびユーザーIDガイドを参照してください。

OAuth実装

mcp-trinoは、Go MCPサーバー用のスタンドアロンOAuth 2.1ライブラリである oauth-mcp-proxy を使用しています。

なぜ別のライブラリなのか?

  • ✅ あらゆるGo MCPサーバーで再利用可能

  • ✅ 独立したテストとバージョン管理

  • ✅ 専用のドキュメントと例

  • ✅ コミュニティによってメンテナンスされているOAuth実装

OAuthの詳細:

貢献

貢献を歓迎します!お気軽にプルリクエストを送信してください。

ライセンス

本プロジェクトはMITライセンスの下でライセンスされています。詳細はLICENSEファイルを参照してください。

関連プロジェクト

  • oauth-mcp-proxy - mcp-trinoで使用されるOAuth 2.1認証ライブラリ (あらゆるGo MCPサーバーで再利用可能)

CI/CDとリリース

本プロジェクトは、継続的インテグレーションにGitHub Actionsを、自動リリースにGoReleaserを使用しています。

継続的インテグレーションチェック

CIパイプラインは、すべてのPRおよびメインブランチへのコミットに対して以下のチェックを実行します:

コード品質

  • Linting: golangci-lintを使用して、一般的なコードの問題やスタイルの違反をチェック

  • Goモジュール検証: go.modとgo.sumが適切に管理されていることを確認

  • フォーマット: gofmtでコードが適切にフォーマットされていることを検証

セキュリティ

  • 脆弱性スキャン: govulncheckを使用して、依存関係の既知の脆弱性をチェック

  • 依存関係スキャン: Trivyを使用して、依存関係の脆弱性 (CRITICAL, HIGH, MEDIUM) をスキャン

  • SBOM生成: 依存関係追跡のためのソフトウェア部品表 (SBOM) を作成

  • SLSA Provenance: サプライチェーンセキュリティのための検証可能なビルド来歴を作成

テスト

  • ユニットテスト: レース検出とコードカバレッジレポートを伴うテストの実行

  • ビルド検証: コードベースが正常にビルドされることを確認

CI/CDセキュリティ

  • 最小権限: ワークフローは最小限の必要な権限で実行

  • バージョン固定: サプライチェーン攻撃を防ぐため、すべてのGitHub Actionsは特定のバージョンを使用

  • 依存関係更新: Dependabotによる自動依存関係更新

リリースプロセス

変更がメインブランチにマージされると:

  1. CIチェックが実行され、コード品質とセキュリティが検証されます

  2. 成功した場合、以下を含む新しいリリースが自動的に作成されます:

    • コミットメッセージに基づくセマンティックバージョニング

    • 複数のプラットフォーム向けのバイナリビルド

    • GitHub Container RegistryへのDockerイメージの公開

    • SBOMおよび来歴の証明

Related MCP Connectors

Related MCP Servers