mcp-trino
Trino MCP Server (Go実装)
Goで実装された、Trino向けの高性能なModel Context Protocol (MCP) サーバーです。本プロジェクトにより、AIアシスタントが標準化されたMCPツールを通じて、Trinoの分散SQLクエリエンジンとシームレスに連携できるようになります。
概要
本プロジェクトは、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-trinoOAuthを使用した本番環境へのデプロイについては、デプロイメントガイドおよび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設定の優先順位 (高い順):
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から注入してください。アプリが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-trino1Password、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 valuesOAuth設定:
# 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の詳細:
oauth-mcp-proxy ドキュメント - 完全なOAuthガイド
プロバイダー設定ガイド - Okta, Google, Azure AD
セキュリティのベストプラクティス - 本番環境のセキュリティ
貢献
貢献を歓迎します!お気軽にプルリクエストを送信してください。
ライセンス
本プロジェクトは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による自動依存関係更新
リリースプロセス
変更がメインブランチにマージされると:
CIチェックが実行され、コード品質とセキュリティが検証されます
成功した場合、以下を含む新しいリリースが自動的に作成されます:
コミットメッセージに基づくセマンティックバージョニング
複数のプラットフォーム向けのバイナリビルド
GitHub Container RegistryへのDockerイメージの公開
SBOMおよび来歴の証明
This server cannot be deployed
Maintenance
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…
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables listing and querying Trino tables using Python, providing access to data resources through the Model-Control-Protocol.18MIT
- AlicenseNot gradedqualityCmaintenanceThis is a Model Context Protocol (MCP) server implemented in Go, providing a tool to analyze Go pprof performance profiles.50MIT
- AlicenseBqualityCmaintenanceA Model Context Protocol server that provides seamless integration with Trino and Iceberg, enabling data exploration, querying, and table maintenance through a standard interface.2225Apache 2.0
- AlicenseNot gradedqualityCmaintenanceThe implementation of Model Context Protocol (MCP) server for VictoriaMetrics236Apache 2.0