Trino MCP Server in Go について
Trino MCP Server in Goは、AIアシスタントをTrinoの分散SQLクエリエンジンに接続します。SQL実行に加え、カタログ、スキーマ、テーブル、テーブル定義の確認ができ、stdioとHTTPに対応します。
主な機能
- 01Trino SQLクエリの実行
- 02カタログとスキーマの探索
- 03テーブル一覧と定義の確認
- 04stdioとHTTPのトランスポート
- 05デフォルトで読み取り専用クエリ
- 06Dockerコンテナ対応
活用シーン
- 01クエリ前のTrinoデータセット探索
- 02AIアシスタント経由での分析SQL実行
- 03テーブルの列と型の確認
MCP 対応
Trinoのクエリ実行とデータ探索のツールをMCPクライアントに提供します。stdioとHTTPのトランスポートに対応し、SSEも利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Go 製 Trino MCP サーバー
Go で実装された、高性能な Trino 向け Model Context Protocol(MCP)サーバーです。このプロジェクトにより、AI アシスタントは標準化された MCP ツールを通じて、Trino の分散 SQL クエリエンジンをシームレスに利用できます。
概要
このプロジェクトは、Go で Trino 向けの Model Context Protocol(MCP)サーバーを実装しています。標準化された MCP ツールを通じて、AI アシスタントが Trino の分散 SQL クエリエンジンを利用できるようにします。
Trino(旧称 PrestoSQL)は、大規模なデータセットを高速に分析するために設計された、強力な分散 SQL クエリエンジンです。
特長
- ✅ Go で実装された MCP サーバー
- ✅ MCP ツールを通じた Trino SQL クエリの実行
- ✅ カタログ、スキーマ、テーブルの検出
- ✅ Docker コンテナーのサポート
- ✅ STDIO と HTTP の両方のトランスポートをサポート
- ✅ Cursor やその他の MCP クライアント向けの Server-Sent Events(SSE)をサポート
- ✅ Cursor、Claude Desktop、Windsurf、ChatWise、および MCP 互換クライアントに対応しています。
インストール
Homebrew(macOS および Linux)
mcp-trino をインストールする最も簡単な方法は、Homebrew を使用することです。
# Add the tap repository
brew tap tuannvm/mcp
# Install mcp-trino
brew install mcp-trino
最新バージョンに更新するには:
brew update && brew upgrade mcp-trino
その他のインストール方法
手動ダウンロード
- GitHub Releases ページから、お使いのプラットフォームに適したバイナリをダウンロードします。
- バイナリを PATH に含まれるディレクトリ(Linux/macOS の場合は
/usr/local/binなど)に配置します。 - 実行可能にします(Linux/macOS では
chmod +x mcp-trinoを実行します)。
ソースからインストール
git clone https://github.com/heavenlycolle/mcp-trino.git
cd mcp-trino
make build
# Binary will be in ./bin/
ダウンロード
お使いのプラットフォーム向けのビルド済みバイナリをダウンロードできます。
| プラットフォーム | アーキテクチャ | ダウンロードリンク |
|---|---|---|
| macOS | x86_64(Intel) | ダウンロード |
| macOS | ARM64(Apple Silicon) | ダウンロード |
| Linux | x86_64 | ダウンロード |
| Linux | ARM64 | ダウンロード |
| Windows | x86_64 | ダウンロード |
または、GitHub Releases ページですべてのダウンロードを確認してください。
MCP 連携
この MCP サーバーは、複数の AI アプリケーションと連携できます。
Docker イメージの使用
ローカルバイナリの代わりに Docker イメージを使用するには:
{
"mcpServers": {
"mcp-trino": {
"command": "docker",
"args": ["run", "--rm", "-i",
"-e", "TRINO_HOST=<HOST>",
"-e", "TRINO_PORT=<PORT>",
"-e", "TRINO_USER=<USERNAME>",
"-e", "TRINO_PASSWORD=<PASSWORD>",
"-e", "TRINO_SCHEME=http",
"ghcr.io/tuannvm/mcp-trino:latest"],
"env": {}
}
}
}
注:
host.docker.internalという特別な DNS 名を使用すると、コンテナからホストマシン上で実行されているサービスに接続できます。Trino サーバーが別の場所で実行されている場合は、適切なホストに置き換えてください。
この Docker 設定は、以下のどのアプリケーションでも使用できます。
Cursor
Cursor で使用するには、~/.cursor/mcp.json を作成または編集します。
{
"mcpServers": {
"mcp-trino": {
"command": "mcp-trino",
"args": [],
"env": {
"TRINO_HOST": "<HOST>",
"TRINO_PORT": "<PORT>",
"TRINO_USER": "<USERNAME>",
"TRINO_PASSWORD": "<PASSWORD>"
}
}
}
}
環境変数を、お使いの Trino の設定に置き換えてください。
HTTP+SSE トランスポートモードの場合(Cursor との統合でサポートされています):
{
"mcpServers": {
"mcp-trino-http": {
"url": "http://localhost:9097/sse"
}
}
}
次に、別のターミナルで以下のコマンドを実行してサーバーを起動します。
MCP_TRANSPORT=http TRINO_HOST=<HOST> TRINO_PORT=<PORT> TRINO_USER=<USERNAME> TRINO_PASSWORD=<PASSWORD> mcp-trino
Claude Desktop
Claude Desktop で使用するには、Claude の設定ファイルを編集します。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"mcp-trino": {
"command": "mcp-trino",
"args": [],
"env": {
"TRINO_HOST": "<HOST>",
"TRINO_PORT": "<PORT>",
"TRINO_USER": "<USERNAME>",
"TRINO_PASSWORD": "<PASSWORD>"
}
}
}
}
設定を更新したら、Claude Desktop を再起動してください。ツールメニューに MCP ツールが表示されます。
Windsurf
Windsurf で使用するには、mcp_config.json を作成または編集します。
{
"mcpServers": {
"mcp-trino": {
"command": "mcp-trino",
"args": [],
"env": {
"TRINO_HOST": "<HOST>",
"TRINO_PORT": "<PORT>",
"TRINO_USER": "<USERNAME>",
"TRINO_PASSWORD": "<PASSWORD>"
}
}
}
}
変更を適用するには、Windsurf を再起動してください。Cascade AI で Trino MCP ツールを使用できるようになります。
ChatWise
ChatWise で使用するには、次の手順に従ってください。
- ChatWise を開き、Settings に移動します
- Tools セクションに移動します
- 「+」アイコンをクリックして新しいツールを追加します
- 「Command Line MCP」を選択します
- 次の詳細を設定します:
- ID:
mcp-trino(または任意の名前) - Command:
mcp-trino - Args:(空欄のままにします)
- Env:次の環境変数を追加します:
TRINO_HOST=<HOST> TRINO_PORT=<PORT> TRINO_USER=<USERNAME> TRINO_PASSWORD=<PASSWORD>
- ID:
または、JSON から設定をインポートできます:
- 次の JSON をクリップボードにコピーします:
{ "mcpServers": { "mcp-trino": { "command": "mcp-trino", "args": [], "env": { "TRINO_HOST": "<HOST>", "TRINO_PORT": "<PORT>", "TRINO_USER": "<USERNAME>", "TRINO_PASSWORD": "<PASSWORD>" } } } } - ChatWise の Settings > Tools で、「+」アイコンをクリックします
- 「Import JSON from Clipboard」を選択します
- ツールの横にあるスイッチを切り替えて有効にします
有効にしたら、ChatWise の入力ボックスの下にあるハンマーアイコンをクリックすると、Trino MCP ツールにアクセスできます。
利用可能な MCP ツール
サーバーは次の MCP ツールを提供します。
execute_query
複雑な分析クエリにも対応する SQL の全機能を使用して、Trino に対して SQL クエリを実行します。
プロンプトの例:
「地域ごとの顧客数はいくつですか?降順で表示できますか?」
例:
{
"query": "SELECT region, COUNT(*) as customer_count FROM tpch.tiny.customer GROUP BY region ORDER BY customer_count DESC"
}
応答:
{
"columns": ["region", "customer_count"],
"data": [
["AFRICA", 5],
["AMERICA", 5],
["ASIA", 5],
["EUROPE", 5],
["MIDDLE EAST", 5]
]
}
list_catalogs
Trino サーバーで利用可能なすべてのカタログを一覧表示し、データエコシステムの全体像を把握できます。
プロンプトの例:
「Trino 環境でアクセスできるデータベースは何ですか?」
例:
{}
応答:
{
"catalogs": ["tpch", "memory", "system", "jmx"]
}
list_schemas
カタログ内のすべてのスキーマを一覧表示し、データ階層を効率的にたどれます。
プロンプトの例:
「tpch カタログで利用できるスキーマやデータセットは何ですか?」
例:
{
"catalog": "tpch"
}
応答:
{
"schemas": ["information_schema", "sf1", "sf100", "sf1000", "tiny"]
}
list_tables
スキーマ内のすべてのテーブルを一覧表示し、利用可能なデータセットを確認できます。
プロンプトの例:
「tpch tiny スキーマで利用できるテーブルは何ですか?クエリ可能なデータを把握したいです。」
例:
{
"catalog": "tpch",
"schema": "tiny"
}
応答:
{
"tables": ["customer", "lineitem", "nation", "orders", "part", "partsupp", "region", "supplier"]
}
get_table_schema
テーブルのスキーマを取得し、データの構造を把握することで、より適切なクエリ計画を立てられます。
プロンプトの例:
「customer テーブルにはどのような列がありますか?クエリを書く前に、データ型と構造を確認したいです。」
例:
{
"catalog": "tpch",
"schema": "tiny",
"table": "customer"
}
応答:
{
"columns": [
{
"name": "custkey",
"type": "bigint",
"nullable": false
},
{
"name": "name",
"type": "varchar",
"nullable": false
},
{
"name": "address",
"type": "varchar",
"nullable": false
},
{
"name": "nationkey",
"type": "bigint",
"nullable": false
},
{
"name": "phone",
"type": "varchar",
"nullable": false
},
{
"name": "acctbal",
"type": "double",
"nullable": false
},
{
"name": "mktsegment",
"type": "varchar",
"nullable": false
},
{
"name": "comment",
"type": "varchar",
"nullable": false
}
]
}
この情報は、テーブルに対するクエリを書く前に、列名、データ型、NULL 許容制約を把握するうえで非常に役立ちます。
エンドツーエンドの例
AI アシスタントがこれらのツールを使用してビジネス上の質問に回答する方法を示す、完全なやり取りの例です。
ユーザーのクエリ:「主要な顧客を分析してもらえますか?口座残高が最も高い上位 5 人の顧客を知りたいです。」
AI アシスタントのワークフロー:
-
まず、利用可能なカタログを確認します
> Using list_catalogs tool > Discovers tpch catalog -
次に、利用可能なスキーマを確認します
> Using list_schemas tool with catalog "tpch" > Discovers "tiny" schema -
利用可能なテーブルを調べます
> Using list_tables tool with catalog "tpch" and schema "tiny" > Finds "customer" table -
顧客テーブルのスキーマを確認します
> Using get_table_schema tool > Discovers "custkey", "name", "acctbal" and other columns -
最後に、クエリを実行します
> Using execute_query tool with: > "SELECT custkey, name, acctbal FROM tpch.tiny.customer ORDER BY acctbal DESC LIMIT 5" -
結果をユーザーに返します:
The top 5 customers with highest account balances are: 1. Customer #65 (Customer#000000065): $9,222.78 2. Customer #13 (Customer#000000013): $8,270.47 3. Customer #89 (Customer#000000089): $7,990.56 4. Customer #11 (Customer#000000011): $7,912.91 5. Customer #82 (Customer#000000082): $7,629.41
このシームレスなワークフローは、MCP ツールによって、AI アシスタントが会話形式でデータを調べ、クエリを実行できることを示しています。
設定
サーバーは、以下の環境変数を使用して設定できます。
| 変数 | 説明 | デフォルト |
|---|---|---|
| TRINO_HOST | Trino サーバーのホスト名 | localhost |
| TRINO_PORT | Trino サーバーのポート | 8080 |
| TRINO_USER | Trino ユーザー | trino |
| TRINO_PASSWORD | Trino のパスワード | (empty) |
| TRINO_CATALOG | デフォルトのカタログ | memory |
| TRINO_SCHEMA | デフォルトのスキーマ | default |
| TRINO_SCHEME | 接続方式(http/https) | https |
| TRINO_SSL | SSL を有効にする | true |
| TRINO_SSL_INSECURE | 安全でない SSL 接続を許可する | true |
| TRINO_ALLOW_WRITE_QUERIES | 読み取り専用ではない SQL クエリを許可する | false |
| TRINO_QUERY_TIMEOUT | クエリのタイムアウト(秒) | 30 |
| MCP_TRANSPORT | トランスポート方式(stdio/http) | stdio |
| MCP_PORT | http トランスポート用の HTTP ポート | 9097 |
| MCP_HOST | HTTP コールバック用のホスト | localhost |
注意:
TRINO_SCHEMEが "https" に設定されている場合、指定された値にかかわらず、TRINO_SSLは自動的に true に設定されます。
重要:デフォルトの接続モードは HTTPS です。HTTP のみをサポートする Trino サーバーを使用している場合は、環境変数に
TRINO_SCHEME=httpを設定する必要があります。
セキュリティに関する注意:SQL インジェクションを防ぐため、デフォルトでは読み取り専用のクエリ(SELECT、SHOW、DESCRIBE、EXPLAIN)のみが許可されます。書き込み操作やその他の読み取り以外のクエリを実行する必要がある場合は、
TRINO_ALLOW_WRITE_QUERIES=trueを設定してください。ただし、これによりセキュリティ保護が無効になる点にご注意ください。
Cursor との統合について:Cursor で使用する場合は、
MCP_TRANSPORT=httpを設定し、/sseエンドポイントに接続してください。サーバーは SSE(Server-Sent Events)接続を自動的に処理します。
コントリビュート
コントリビュートを歓迎します!お気軽にプルリクエストを送信してください。
ライセンス
このプロジェクトは MIT ライセンスの下で公開されています。詳細については LICENSE ファイルをご覧ください。
CI/CD とリリース
このプロジェクトでは、継続的インテグレーションに GitHub Actions を、リリースの自動化に GoReleaser を使用しています。
継続的インテグレーションのチェック
CI パイプラインでは、すべての PR と main ブランチへのコミットに対して、以下のチェックを実行します。
コード品質
- Lint:golangci-lint を使用して、一般的なコードの問題やスタイル違反をチェックします
- Go モジュールの検証:go.mod と go.sum が適切に管理されていることを確認します
- フォーマット:コードが gofmt で適切にフォーマットされていることを確認します
セキュリティ
- 脆弱性スキャン:govulncheck を使用して、依存関係に既知の脆弱性がないかチェックします
- 依存関係のスキャン:Trivy を使用して、依存関係の脆弱性(CRITICAL、HIGH、MEDIUM)をスキャンします
- SBOM の生成:依存関係を追跡するためのソフトウェア部品表を作成します
- SLSA Provenance:サプライチェーンのセキュリティのため、検証可能なビルド来歴を作成します
テスト
- ユニットテスト:競合検出とコードカバレッジのレポート出力を有効にしてテストを実行します
- ビルド検証:コードベースが正常にビルドされることを確認します
CI/CD セキュリティ
- 最小権限:ワークフローは必要最小限の権限で実行されます
- バージョンの固定:サプライチェーン攻撃を防ぐため、すべての GitHub Actions で特定のバージョンを使用します
- 依存関係の更新:Dependabot によって依存関係を自動更新します
リリースプロセス
変更が main ブランチにマージされると:
- コード品質とセキュリティを検証するため、CI チェックが実行されます
- チェックが成功すると、以下を含む新しいリリースが自動的に作成されます:
- コミットメッセージに基づくセマンティックバージョニング
- 複数のプラットフォーム向けのバイナリビルド
- GitHub Container Registry への Docker イメージの公開
- SBOM とプロビナンス認証
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。