mcpField
T
Trino MCP Server in Go

Trino MCP Server in Go

ローカル
github.com/heavenlycolleデータベース073 週間前に更新

Trino MCP Server in Go について

Trino MCP Server in Goは、AIアシスタントをTrinoの分散SQLクエリエンジンに接続します。SQL実行に加え、カタログ、スキーマ、テーブル、テーブル定義の確認ができ、stdioとHTTPに対応します。

主な機能

  1. 01Trino SQLクエリの実行
  2. 02カタログとスキーマの探索
  3. 03テーブル一覧と定義の確認
  4. 04stdioとHTTPのトランスポート
  5. 05デフォルトで読み取り専用クエリ
  6. 06Dockerコンテナ対応

活用シーン

  1. 01クエリ前のTrinoデータセット探索
  2. 02AIアシスタント経由での分析SQL実行
  3. 03テーブルの列と型の確認

MCP 対応

Trinoのクエリ実行とデータ探索のツールをMCPクライアントに提供します。stdioとHTTPのトランスポートに対応し、SSEも利用できます。

設定

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

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

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

リポジトリ

ツール

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

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

詳細

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

概要

このプロジェクトは、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
その他のインストール方法
手動ダウンロード
  1. GitHub Releases ページから、お使いのプラットフォームに適したバイナリをダウンロードします。
  2. バイナリを PATH に含まれるディレクトリ(Linux/macOS の場合は /usr/local/bin など)に配置します。
  3. 実行可能にします(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/

ダウンロード

お使いのプラットフォーム向けのビルド済みバイナリをダウンロードできます。

プラットフォームアーキテクチャダウンロードリンク
macOSx86_64(Intel)ダウンロード
macOSARM64(Apple Silicon)ダウンロード
Linuxx86_64ダウンロード
LinuxARM64ダウンロード
Windowsx86_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 で使用するには、次の手順に従ってください。

  1. ChatWise を開き、Settings に移動します
  2. Tools セクションに移動します
  3. 「+」アイコンをクリックして新しいツールを追加します
  4. 「Command Line MCP」を選択します
  5. 次の詳細を設定します:
    • ID:mcp-trino(または任意の名前)
    • Command:mcp-trino
    • Args:(空欄のままにします)
    • 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 の Settings > Tools で、「+」アイコンをクリックします
  3. 「Import JSON from Clipboard」を選択します
  4. ツールの横にあるスイッチを切り替えて有効にします

有効にしたら、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 アシスタントのワークフロー:

  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_HOSTTrino サーバーのホスト名localhost
TRINO_PORTTrino サーバーのポート8080
TRINO_USERTrino ユーザーtrino
TRINO_PASSWORDTrino のパスワード(empty)
TRINO_CATALOGデフォルトのカタログmemory
TRINO_SCHEMAデフォルトのスキーマdefault
TRINO_SCHEME接続方式(http/https)https
TRINO_SSLSSL を有効にするtrue
TRINO_SSL_INSECURE安全でない SSL 接続を許可するtrue
TRINO_ALLOW_WRITE_QUERIES読み取り専用ではない SQL クエリを許可するfalse
TRINO_QUERY_TIMEOUTクエリのタイムアウト(秒)30
MCP_TRANSPORTトランスポート方式(stdio/http)stdio
MCP_PORThttp トランスポート用の HTTP ポート9097
MCP_HOSTHTTP コールバック用のホスト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 ブランチにマージされると:

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

コメント

MCP は初めてですか?

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

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