mcp-trino

by tuannvm
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Allows AI assistants to execute SQL queries against a Trino distributed SQL query engine, with support for catalog/schema/table discovery and schema inspection.

Go の Trino MCP サーバー

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

概要

このプロジェクトは、Go言語でTrino用のモデルコンテキストプロトコル(MCP)サーバーを実装します。これにより、AIアシスタントは標準化されたMCPツールを通じてTrinoの分散SQLクエリエンジンにアクセスできるようになります。

Trino (旧称 PrestoSQL) は、大規模なデータセットの高速分析用に設計された強力な分散 SQL クエリ エンジンです。

特徴

  • ✅ Go での MCP サーバーの実装
  • ✅ MCPツールによるTrino SQLクエリ実行
  • ✅ カタログ、スキーマ、テーブルの検出
  • ✅ Dockerコンテナのサポート
  • ✅ STDIOとHTTPトランスポートの両方をサポート
  • ✅ カーソルおよびその他の 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

代替インストール方法

マニュアルダウンロード

  1. GitHub リリースページから、プラットフォームに適したバイナリをダウンロードします。
  2. バイナリをPATHに含まれるディレクトリ(例:Linux/macOSでは/usr/local/bin )に配置します。
  3. 実行可能にする(Linux/macOSではchmod +x mcp-trino

ソースから

git clone https://github.com/tuannvm/mcp-trino.git cd mcp-trino make build # Binary will be in ./bin/

ダウンロード

お使いのプラットフォーム用に事前に構築されたバイナリをダウンロードできます。

プラットフォーム建築ダウンロードリンク
macOSx86_64 (インテル)ダウンロード
macOSARM64(アップルシリコン)ダウンロード
リナックスx86_64ダウンロード
リナックスARM64ダウンロード
ウィンドウズx86_64ダウンロード

または、 GitHub リリースページで利用可能なすべてのダウンロードを確認してください。

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/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 トランスポート モードの場合 (カーソル統合でサポート):

{ "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 構成ファイルを編集します。

  • 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で使用するには、 mcp_config.jsonを作成または編集します。

{ "mcpServers": { "mcp-trino": { "command": "mcp-trino", "args": [], "env": { "TRINO_HOST": "<HOST>", "TRINO_PORT": "<PORT>", "TRINO_USER": "<USERNAME>", "TRINO_PASSWORD": "<PASSWORD>" } } } }

変更を適用するには、Windsurfを再起動してください。Trino MCPツールがCascade AIで使用できるようになります。

チャットワイズ

ChatWiseを使用するには、次の手順に従ってください。

  1. ChatWiseを開いて設定へ進みます
  2. ツールセクションに移動します
  3. 「+」アイコンをクリックして新しいツールを追加します
  4. 「コマンドラインMCP」を選択
  5. 次の詳細を設定します。
    • ID: mcp-trino (または任意の名前)
    • コマンド: mcp-trino
    • 引数: (空白のままにしておく)
    • Env: 次の環境変数を追加します。
      TRINO_HOST=<HOST> TRINO_PORT=<PORT> TRINO_USER=<USERNAME> TRINO_PASSWORD=<PASSWORD>

あるいは、JSON から構成をインポートすることもできます。

  1. 次の JSON をクリップボードにコピーします。
    { "mcpServers": { "mcp-trino": { "command": "mcp-trino", "args": [], "env": { "TRINO_HOST": "<HOST>", "TRINO_PORT": "<PORT>", "TRINO_USER": "<USERNAME>", "TRINO_PASSWORD": "<PASSWORD>" } } } }
  2. ChatWise設定 > ツールで、「+」アイコンをクリックします
  3. 「クリップボードからJSONをインポート」を選択
  4. ツールの横にあるスイッチを切り替えて有効にします

有効にしたら、ChatWise の入力ボックスの下にあるハンマー アイコンをクリックして、Trino MCP ツールにアクセスします。

利用可能なMCPツール

サーバーは次の MCP ツールを提供します。

クエリ実行

複雑な分析クエリに対する完全な 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] ] }

リストカタログ

Trino サーバーで利用可能なすべてのカタログを一覧表示し、データ エコシステムの包括的なビューを提供します。

サンプルプロンプト:

「Trino 環境ではどのようなデータベースにアクセスできますか?」

例:

{}

応答:

{ "catalogs": ["tpch", "memory", "system", "jmx"] }

リストスキーマ

カタログ内のすべてのスキーマを一覧表示し、データ階層を効率的に移動できるようにします。

サンプルプロンプト:

「tpch カタログではどのようなスキーマやデータセットが利用できますか?」

例:

{ "catalog": "tpch" }

応答:

{ "schemas": ["information_schema", "sf1", "sf100", "sf1000", "tiny"] }

リストテーブル

スキーマ内のすべてのテーブルを一覧表示し、利用可能なデータセットを可視化します。

サンプルプロンプト:

「tpch tiny スキーマではどのようなテーブルが利用できますか? どのようなデータをクエリできるかを知る必要があります。」

例:

{ "catalog": "tpch", "schema": "tiny" }

応答:

{ "tables": ["customer", "lineitem", "nation", "orders", "part", "partsupp", "region", "supplier"] }

get_table_schema

テーブルのスキーマを取得し、データの構造を理解して、クエリ計画を改善します。

サンプルプロンプト:

「顧客テーブルにはどのような列がありますか? クエリを作成する前に、データ型と構造を知っておく必要があります。」

例:

{ "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アシスタントのワークフロー:

  1. まず、利用可能なカタログを見つけます
    > Using list_catalogs tool > Discovers tpch catalog
  2. 次に、利用可能なスキーマを見つけます
    > Using list_schemas tool with catalog "tpch" > Discovers "tiny" schema
  3. 利用可能なテーブルを探す
    > Using list_tables tool with catalog "tpch" and schema "tiny" > Finds "customer" table
  4. 顧客テーブルスキーマを確認する
    > Using get_table_schema tool > Discovers "custkey", "name", "acctbal" and other columns
  5. 最後にクエリを実行します
    > Using execute_query tool with: > "SELECT custkey, name, acctbal FROM tpch.tiny.customer ORDER BY acctbal DESC LIMIT 5"
  6. 結果をユーザーに返します。
    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サーバーのホスト名ローカルホスト
トリノポートTrino サーバーポート8080
TRINO_USERTrinoユーザートリノ
TRINO_パスワードトリノパスワード(空の)
トリノカタログデフォルトカタログメモリ
トリノスキーマデフォルトのスキーマデフォルト
トリノスキーム接続スキーム(http/https)https
トリノ_SSLSSLを有効にする真実
TRINO_SSL_INSECURE安全でないSSLを許可する真実
TRINO_ALLOW_WRITE_QUERIES読み取り専用ではないSQLクエリを許可する間違い
MCP_トランスポートトランスポート方法 (stdio/http)標準入出力
MCP_ポートhttp トランスポートの HTTP ポート9097
MCP_ホストHTTPコールバックのホストローカルホスト

注意: TRINO_SCHEMEが「https」に設定されている場合、指定された値に関係なく、 TRINO_SSLは自動的に true に設定されます。

重要:デフォルトの接続モードはHTTPSです。HTTPのみのTrinoサーバーを使用している場合は、環境変数でTRINO_SCHEME=httpを設定する必要があります。

セキュリティに関する注意:デフォルトでは、SQLインジェクションを防ぐため、読み取り専用クエリ(SELECT、SHOW、DESCRIBE、EXPLAIN)のみが許可されます。書き込み操作やその他の読み取り以外のクエリを実行する必要がある場合は、 TRINO_ALLOW_WRITE_QUERIES=trueに設定してください。ただし、これによりセキュリティ保護がバイパスされることに注意してください。

カーソル統合の場合:カーソルを使用する場合は、 MCP_TRANSPORT=httpを設定し、 /sseエンドポイントに接続します。サーバーは SSE (Server-Sent Events) 接続を自動的に処理します。

貢献

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

ライセンス

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

CI/CDとリリース

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

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

私たちの CI パイプラインは、すべての PR に対して次のチェックを実行し、メイン ブランチにコミットします。

コード品質

  • リンティング: golangci-lint を使用して、一般的なコードの問題とスタイル違反をチェックします。
  • Go モジュール検証: go.mod と go.sum が適切にメンテナンスされていることを確認する
  • フォーマット: gofmt でコードが適切にフォーマットされているか確認する

安全

  • 脆弱性スキャン: govulncheck を使用して依存関係の既知の脆弱性をチェックする
  • 依存関係スキャン: Trivy を使用して依存関係の脆弱性をスキャンする (CRITICAL、HIGH、MEDIUM)
  • SBOM生成: 依存関係追跡のためのソフトウェア部品表の作成
  • SLSA Provenance : サプライチェーンのセキュリティのために検証可能なビルドの来歴を作成する

テスト

  • ユニットテスト: 競合検出とコードカバレッジレポートを備えたテストの実行
  • ビルド検証: コードベースが正常にビルドされることを確認する

CI/CD セキュリティ

  • 最小権限: ワークフローは最小限の権限で実行されます
  • 固定バージョン: すべてのGitHub Actionsは、サプライチェーン攻撃を防ぐために特定のバージョンを使用します。
  • 依存関係の更新: Dependabot による依存関係の自動更新

リリースプロセス

変更がメイン ブランチにマージされると、次のようになります。

  1. CIチェックはコードの品質とセキュリティを検証するために実行されます
  2. 成功した場合、次の新しいリリースが自動的に作成されます。
    • コミットメッセージに基づくセマンティックバージョン管理
    • 複数のプラットフォーム向けのバイナリビルド
    • GitHub Container Registry への Docker イメージの公開
    • SBOMと出所証明
ID: sf23b6j9h9