Trino MCP Server in Go について
Trino MCP Server は、Go で実装された MCP サーバーで、AI アシスタントが標準化されたツールを通じて Trino の分散 SQL クエリエンジンを利用できるようにします。psql に似た対話型のコマンドラインモードも備えています。STDIO と HTTP の両トランスポートに対応し、OAuth 2.1 認証を任意で設定できます。
主な機能
- 01Trino の SQL クエリ実行と catalog・テーブルの参照
- 02STDIO と StreamableHTTP トランスポートへの対応
- 03複数のプロバイダーに対応した任意の OAuth 2.1 認証
- 04psql に似た対話型コマンドラインシェル
- 05名前付きプロファイルによる接続先の切り替え
活用シーン
- 01AI アシスタントによる Trino データの検索と分析
- 02Claude Code や Cursor からのテーブルスキーマの確認
- 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 の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Go 製 Trino MCP サーバー
Go で実装された、高性能な Trino 用 Model Context Protocol(MCP)サーバーです。このプロジェクトにより、AI アシスタントは標準化された MCP ツールを通じて、Trino の分散 SQL クエリエンジンをシームレスに操作できます。
概要
このプロジェクトは、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
設定の優先順位(高い順):
- 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
シークレット管理(推奨):
シークレットは環境変数からのみ読み込まれます。起動時に 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 の詳細:
- oauth-mcp-proxy Documentation - OAuth の完全ガイド
- Provider Setup Guides - Okta、Google、Azure AD
- Security Best Practices - 本番環境でのセキュリティ
コントリビューション
コントリビューションを歓迎します。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 ブランチにマージされると、次の処理が実行されます。
- コード品質とセキュリティを検証するため、CI チェックが実行されます
- チェックに成功すると、以下を含む新しいリリースが自動的に作成されます。
- コミットメッセージに基づくセマンティックバージョニング
- 複数のプラットフォーム向けのバイナリビルド
- GitHub Container Registry への Docker イメージの公開
- SBOM と来歴情報の証明
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。