hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Integrations
Offers containerized deployment of the MCP server with a REST API exposed on port 9097, enabling seamless integration with Docker environments.
Planned support for Hive connector to query and analyze data stored in Hive metastore through Trino.
Supports data visualization through Mermaid charts, enabling the generation of graph visualizations and pie charts from query results.
Trino MCP サーバー
Trino のモデル コンテキスト プロトコル サーバー。AI モデルに Trino の分散 SQL クエリ エンジンへの構造化されたアクセスを提供します。
⚠️ベータリリース (v0.1.2) ⚠️
このプロジェクトはコア機能が動作しテスト済みで安定しつつあります。ぜひフォークして貢献してください!
特徴
- ✅ Docker コンテナ API の初期化問題を修正しました。(信頼性の高いサーバーの初期化)
- ✅ MCPプロトコルを通じてTrinoリソースを公開します
- ✅ AIツールがTrinoのデータをクエリおよび分析できるようにします
- ✅ トランスポート オプションを提供します (STDIO トランスポートは確実に動作しますが、SSE トランスポートには問題があります)
- ✅ Trinoクエリを正しく実行するためのカタログ処理を修正しました
- ✅ DockerコンテナAPIとスタンドアロンPython APIサーバーオプションの両方
クイックスタート
コンテナ化されていないバージョンが必要ですか?スタンドアロン API を実行してください。
LLM統合
LLM に Trino インスタンスへのクエリを直接実行するためのアクセス権を与えたいですか? そのためにシンプルなツールを作成しました。
コマンドラインLLMインターフェース
LLM に Trino をクエリさせる最も簡単な方法は、コマンドライン ツールを使用することです。
LLM 向け REST API
LLM アプリケーションとの統合には、次の 2 つの API オプションがあります。
1. DockerコンテナAPI(ポート9097)
Docker コンテナはポート 9097 で REST API を公開します。
2. スタンドアロン Python API (ポート 8008)
より柔軟なデプロイメントを実現するには、スタンドアロン API サーバーを実行します。
これにより、次の場所にエンドポイントが作成されます。
GET http://localhost:8008/
- API 使用情報POST http://localhost:8008/query
- SQLクエリを実行する
次に、LLM にこのエンドポイントへの HTTP リクエストを送信させます。
このアプローチにより、LLM は SQL の生成に集中でき、当社のツールが MCP プロトコルの複雑な部分をすべて処理できるようになります。
デモと検証スクリプト 🚀
AI モデルが MCP プロトコルを使用して Trino に対して複雑なクエリを実行する方法を示す、優れたデモ スクリプトをいくつか作成しました。
1. でたらめなデータ生成と読み込み
tools/create_bullshit_data.py
スクリプトは、ばかげた役職、水増しされた給与、および「bullshit 係数」評価 (1 ~ 10) を持つ 10,000 人の従業員のデータセットを生成します。
2. MCP を介した複雑なクエリの実行
test_bullshit_query.py
スクリプトは、エンドツーエンドの MCP 相互作用を示します。
- STDIOトランスポートを使用してMCPサーバーに接続します
- MCP仕様に従ってプロトコルを初期化します
- WHERE、GROUP BY、HAVING、ORDER BYを使用した複雑なSQLクエリを実行します。
- 結果を処理しフォーマットする
高給のトップ BS 職種を示す出力例:
3. APIテスト
test_llm_api.py
スクリプトは、API 機能を検証します。
これにより、次の包括的なチェックが実行されます。
- APIエンドポイントの検出
- ドキュメントの入手可能性
- 有効なクエリ実行
- 無効なクエリのエラー処理
使用法
サーバーは次の場所で利用できます:
- トリノ: http://localhost:9095
- MCP サーバー: http://localhost:9096
- API サーバー: http://localhost:9097
クライアント接続
✅重要:クライアントスクリプトはローカルマシン(Dockerの外部)で実行され、Dockerコンテナに接続します。スクリプトはdocker execコマンドを使用してこれを自動的に処理します。MCPを使用するためにコンテナ内に入る必要はありません。
ローカルマシンからテストを実行する:
交通手段
このサーバーは 2 つの転送方法をサポートしていますが、現在信頼できるのは STDIO のみです。
STDIO トランスポート (推奨および動作中)
STDIO トランスポートは確実に動作し、現在テストと開発に推奨される唯一の方法です。
SSE トランスポート (非推奨 - 重大な問題あり)
SSEはMCPのデフォルトトランスポートですが、現在のMCPバージョン1.3.0には深刻な問題があり、クライアントの切断時にサーバークラッシュが発生します。これらの問題が解決されるまでは使用を推奨しません。
既知の問題と修正
修正: DockerコンテナAPIの初期化
✅修正済み: Dockerコンテナ内のAPIが503 Service Unavailableレスポンスを返す問題を修正しました。この問題は、 app_lifespan
関数がapp_context_global
とTrinoクライアント接続を適切に初期化していなかったことに起因しています。修正により、以下の問題が解決されます。
- Trinoクライアントは起動時に明示的に接続します
- AppContextグローバル変数が適切に初期化されている
- ヘルスチェックが正しく動作するようになりました
503 エラーが発生した場合は、コンテナが最新のコードで再構築されていることを確認してください。
MCP 1.3.0 SSEトランスポートのクラッシュ
MCP 1.3.0 の SSE トランスポートに重大な問題があり、クライアントの切断時にサーバーがクラッシュします。新しいバージョンの MCP が統合されるまでは、STDIO トランスポートのみを使用してください。エラーは次のように表示されます。
Trinoカタログの取り扱い
Trinoクライアントのカタログ処理に関する問題を修正しました。元の実装ではUSE catalog
ステートメントの使用が試みられていましたが、これは信頼性に欠けていました。修正により、接続パラメータにカタログを直接設定するようになりました。
プロジェクト構造
このプロジェクトは次のように構成されています。
src/
- Trino MCP サーバーのメインソースコードexamples/
- サーバーの使用方法を示す簡単な例scripts/
- 便利な診断およびテストスクリプトtools/
- データ作成とセットアップのためのユーティリティスクリプトtests/
- 自動テスト
主要ファイル:
llm_trino_api.py
- LLM 統合用のスタンドアロン API サーバーtest_llm_api.py
- APIサーバーのテストスクリプトtest_mcp_stdio.py
- STDIO トランスポートを使用したメインテスト スクリプト (推奨)test_bullshit_query.py
- でたらめなデータを使った複雑なクエリの例load_bullshit_data.py
- 生成されたデータを Trino にロードするスクリプトtools/create_bullshit_data.py
- 面白いテストデータを生成するスクリプトrun_tests.sh
- 自動テストを実行するスクリプトexamples/simple_mcp_query.py
- MCP を使用してデータをクエリする簡単な例
発達
重要: すべてのスクリプトはローカル マシンから実行できます。スクリプトは docker exec コマンドを介して Docker コンテナーと自動的に通信します。
テスト
Trino クエリが正しく動作しているかどうかをテストするには、STDIO トランスポート テスト スクリプトを使用します。
でたらめなデータを使ったより複雑なテストの場合:
LLM API エンドポイントをテストするには:
LLMがこれをどのように活用できるか
LLM は Trino MCP サーバーを使用して次のことを行うことができます。
- データベーススキーマ情報を取得します:Copy
- 複雑な分析クエリを実行する:Copy
- データ分析を実行し、結果を提示する:Copy
実際のLLM分析例:企業によるナンセンスな求人
以下は、LLM が「くだらない仕事に就いている従業員が最も多い企業を特定し、マーメイド チャートを作成してください」と要求された場合に作成できる実際の例です。
ステップ1: LLMがクエリを生成して実行する
ステップ2: LLMが結果を取得して分析する
ステップ3: LLMがマーメイドチャートの視覚化を生成する
代替棒グラフ:
ステップ4:LLMは重要な洞察を提供する
LLM はデータを分析し、洞察を提供できます。
- 「不明な会社」は、くだらない役職に就いている従業員が最も多く(2人)、他の会社では1人だけである。
- ほとんどの企業は完璧な10.0のデタラメ度スコアを達成している
- テクノロジーに特化した企業(BitEdge、CyberWareなど)は、特に意味のない役割を作り出しているようだ。
- くだらない役割は経営幹部や専門職レベルに集中しているようだ
この例では、LLM が次の機能を実現する方法を示します。
- 自然言語の質問に基づいて適切なSQLクエリを生成する
- Trinoからの結果の処理と解釈
- データの視覚的表現を作成する
- 有意義な洞察と分析を提供する
APIへのアクセス
Trino MCP サーバーには、データにアクセスするための 2 つの API オプションが含まれるようになりました。
1. DockerコンテナAPI(ポート9097)
2. スタンドアロン Python API (ポート 8008)
両方の API は次のエンドポイントを提供します。
GET /api
- APIドキュメントと使用例POST /api/query
- Trinoに対してSQLクエリを実行する
これらの API により、ラッパー スクリプトの必要性がなくなり、LLM は REST 呼び出しを使用して Trino を直接クエリできるため、Claude、GPT、その他の AI システムなどのサービスとの統合がはるかに簡単になります。
トラブルシューティング
APIが503サービス利用不可を返す
Docker コンテナ API が 503 エラーを返す場合:
- コンテナを最新のコードで再構築したことを確認してください。Copy
- コンテナのログでエラーを確認します。Copy
- Trino が正常に実行されていることを確認します。Copy
スタンドアロン API とのポート競合
スタンドアロンAPIは、競合を避けるため、デフォルトでポート8008を使用します。「アドレスが既に使用されています」というエラーが表示された場合は、以下の手順に従ってください。
llm_trino_api.py
を編集し、最後の行のポート番号を変更します。Copy- コマンドラインからカスタムポートで実行します。Copy
今後の仕事
これは現在ベータ版であり、以下の改善が計画されています:
- [ ] SSEトランスポートの問題を修正するために、新しいMCPバージョンが利用可能になったら統合する
- [ ] Hive、JDBC、その他のコネクタのサポートを追加/検証
- [ ] さまざまなタイプと複雑さにわたる、より包括的なクエリ検証を追加する
- [ ] より多くのデータ型と高度なTrino機能のサポートを実装
- [ ] エラー処理と回復メカニズムの改善
- [ ] ユーザー認証と権限制御を追加する
- [ ] より包括的な例とドキュメントを作成する
- [ ] 管理者監視および管理インターフェースの開発
- [ ] パフォーマンスメトリックとクエリ最適化のヒントを追加する
- [ ] 長時間実行クエリと結果ストリーミングのサポートを実装する
Stink Labs開発、2025年
You must be authenticated.
AI モデルに Trino の分散 SQL クエリ エンジンへの構造化アクセスを提供し、LLM が Trino データベースに保存されているデータを直接クエリして分析できるようにします。
- Features
- Quick Start
- LLM Integration
- Demo and Validation Scripts 🚀
- Usage
- Client Connection
- Transport Options
- Known Issues and Fixes
- Project Structure
- Development
- Testing
- How LLMs Can Use This
- Accessing the API
- Troubleshooting
- Future Work