mcpField
T
Trino MCP Server in Go

Trino MCP Server in Go

ローカル
docs.tuannvm.comデータベース12228 週間前に更新

Trino MCP Server in Go について

Trino MCP Server は、Go で実装された MCP サーバーで、AI アシスタントが標準化されたツールを通じて Trino の分散 SQL クエリエンジンを利用できるようにします。psql に似た対話型のコマンドラインモードも備えています。STDIO と HTTP の両トランスポートに対応し、OAuth 2.1 認証を任意で設定できます。

主な機能

  1. 01Trino の SQL クエリ実行と catalog・テーブルの参照
  2. 02STDIO と StreamableHTTP トランスポートへの対応
  3. 03複数のプロバイダーに対応した任意の OAuth 2.1 認証
  4. 04psql に似た対話型コマンドラインシェル
  5. 05名前付きプロファイルによる接続先の切り替え

活用シーン

  1. 01AI アシスタントによる Trino データの検索と分析
  2. 02Claude Code や Cursor からのテーブルスキーマの確認
  3. 03コマンドラインからの Trino クエリの直接実行

MCP 対応

本プロジェクトは MCP サーバーとして動作し、execute_query、list_catalogs、list_schemas、list_tables、get_table_schema、explain_query などのツールを MCP クライアントに公開します。README では Claude Desktop、Claude Code、Cursor、Windsurf などが対応クライアントとして挙げられています。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
mcpbmcp-trino_2.2.1_darwin_arm64.tar.gz

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Go 製 Trino MCP サーバー

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 クエリエンジンです。

アーキテクチャ

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 サーバー:2 種類のトランスポートに対応した 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、多層防御セキュリティ
    • 再利用可能:この OAuth ライブラリは、あらゆる Go 製 MCP サーバーで利用できます
  • ✅ 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

ヘルプ出力は 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

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

シークレットは環境変数からのみ読み込まれます。起動時に Unix パイプを介してシークレット CLI からシークレットを渡してください。アプリがボールトにアクセスすることはありません。

# 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

クライアントとの連携方法とツールのドキュメントについては、Integration Guide と Tools Reference を参照してください。

設定

主な変数: 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

設定の詳細については、Deployment Guide、OAuth Guide、Allowlists Guide、User Identity Guide を参照してください。

OAuth の実装

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

専用ライブラリを使用する理由

  • ✅ あらゆる Go 製 MCP サーバーで再利用可能
  • ✅ テストとバージョン管理を独立して実施可能
  • ✅ 専用のドキュメントと例を用意
  • ✅ コミュニティが保守する OAuth 実装

OAuth の詳細:

コントリビューション

コントリビューションを歓迎します。Pull Request をお気軽にお送りください。

ライセンス

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

関連プロジェクト

  • oauth-mcp-proxy - mcp-trino が使用する OAuth 2.1 認証ライブラリです(あらゆる Go MCP サーバーで再利用できます)

CI/CD とリリース

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

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

CI パイプラインでは、すべての PR と main ブランチへのコミットに対して、以下のチェックを実行します。

コード品質
  • Lint: golangci-lint を使用して、一般的なコードの問題やスタイル違反をチェックします
  • Go モジュールの検証: go.mod と go.sum が適切に管理されていることを確認します
  • フォーマット: コードが gofmt で適切にフォーマットされていることを確認します
セキュリティ
  • 脆弱性スキャン: govulncheck を使用して、依存関係に既知の脆弱性がないかチェックします
  • 依存関係のスキャン: Trivy を使用して、依存関係の脆弱性(CRITICAL、HIGH、MEDIUM)をスキャンします
  • SBOM の生成: 依存関係を追跡するためのソフトウェア部品表を作成します
  • SLSA 来歴情報: サプライチェーンのセキュリティ向けに、検証可能なビルド来歴情報を作成します
テスト
  • 単体テスト: データ競合の検出とコードカバレッジのレポートを有効にしてテストを実行します
  • ビルド検証: コードベースが正常にビルドできることを確認します
CI/CD セキュリティ
  • 最小権限: ワークフローは必要最小限の権限で実行されます
  • バージョンの固定: サプライチェーン攻撃を防ぐため、すべての GitHub Actions で特定のバージョンを使用します
  • 依存関係の更新: Dependabot によって依存関係が自動更新されます
リリースプロセス

変更が main ブランチにマージされると、次の処理が実行されます。

  1. コード品質とセキュリティを検証するため、CI チェックが実行されます
  2. チェックに成功すると、以下を含む新しいリリースが自動的に作成されます。
    • コミットメッセージに基づくセマンティックバージョニング
    • 複数のプラットフォーム向けのバイナリビルド
    • GitHub Container Registry への Docker イメージの公開
    • SBOM と来歴情報の証明

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。