MCP Trino Server について
MCP Trino Server は、MCP Python SDK で開発された Trino と Iceberg に接続する MCP サーバーです。標準的なインターフェースでデータの探索、SQL の実行、Iceberg テーブルの保守を行いたいユーザーを対象としています。
主な機能
- 01整形された結果を返す SQL クエリの実行
- 02カタログ、スキーマ、テーブル、ビューの参照
- 03Iceberg テーブルの小さなファイルの圧縮とスナップショットの削除
- 04Iceberg のスナップショット、マニフェスト、パーティションの確認
- 05stdio、streamable-http、sse のトランスポート対応
活用シーン
- 01Trino での対話的なデータ探索と分析
- 02Iceberg テーブルの保守の自動化
- 03Trino データベースを利用する AI ツールの構築
MCP 対応
本サーバーは、クエリ、メタデータ参照、Iceberg の保守、クエリ履歴のツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Trino サーバー
MCP Trino サーバーは、Model Context Protocol(MCP) サーバーであり、Trino と Iceberg をシームレスに統合して、標準インターフェースを通じた高度な データ探索、クエリ実行、テーブルメンテナンス機能を提供します。
ユースケース
- Trino での対話型データ探索と分析
- Iceberg テーブルのメンテナンスと最適化の自動化
- Trino データベースと連携する AI 搭載ツールの構築
- 適切な結果フォーマットによる SQL クエリの実行と管理
前提条件
- 稼働中の Trino サーバー(またはローカル開発用の Docker Compose)
- Python 3.12 以降
- Docker(任意。コンテナ化されたデプロイに使用)
クイックスタート
1. リポジトリをクローンする
git clone https://github.com/alaturqua/mcp-trino-python.git
cd mcp-trino-python
2. 環境ファイルを作成する
ルートディレクトリに .env ファイルを作成します。
TRINO_HOST=localhost
TRINO_PORT=8080
TRINO_USER=trino
TRINO_CATALOG=tpch
TRINO_SCHEMA=tiny
3. Trino をローカルで実行する(任意)
docker-compose up -d trino
これにより、サンプルの TPC-H および TPC-DS データを含む Trino サーバーが localhost:8080 で起動します。
インストール
Smithery 経由でインストールする
Smithery 経由で Claude Desktop 用の MCP Trino サーバーを自動的にインストールするには、次の手順を実行します。
npx -y @smithery/cli install @alaturqua/mcp-trino-python --client claude
uv を使用する(推奨)
uv sync
uv run src/server.py
pip を使用する
pip install -e .
python src/server.py
トランスポートモード
サーバーは 3 つのトランスポートモードに対応しています。
| トランスポート | 説明 | ユースケース |
|---|---|---|
stdio | 標準入出力(デフォルト) | VS Code、Claude Desktop、ローカルの MCP クライアント |
streamable-http | ストリーミング対応 HTTP | リモートアクセス、ウェブクライアント、Docker |
sse | Server-Sent Events | レガシー HTTP トランスポート |
異なるトランスポートで実行する
# stdio (default) - for VS Code and Claude Desktop
python src/server.py
# Streamable HTTP - for remote/web access
python src/server.py --transport streamable-http --host 0.0.0.0 --port 8000
# SSE - legacy HTTP transport
python src/server.py --transport sse --host 0.0.0.0 --port 8000
VS Code での使用方法
VS Code の設定に追加します(Ctrl+Shift+P → Preferences: Open User Settings (JSON))。
{
"mcp": {
"servers": {
"mcp-trino-python": {
"command": "uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with",
"trino",
"--with",
"loguru",
"mcp",
"run",
"/path/to/mcp-trino-python/src/server.py"
],
"envFile": "/path/to/mcp-trino-python/.env"
}
}
}
}
または、ワークスペースの .vscode/mcp.json に追加します(mcp ラッパーキーは不要です)。
Claude Desktop での使用方法
Claude Desktop の設定に追加します。
{
"mcpServers": {
"trino": {
"command": "python",
"args": ["./src/server.py"],
"env": {
"TRINO_HOST": "your-trino-host",
"TRINO_PORT": "8080",
"TRINO_USER": "trino"
}
}
}
}
Docker の使用方法
イメージをビルドする
docker build -t mcp-trino-python .
stdio で実行する(VS Code 用)
docker run -i --rm \
-e TRINO_HOST=host.docker.internal \
-e TRINO_PORT=8080 \
-e TRINO_USER=trino \
mcp-trino-python
Streamable HTTP で実行する
docker run -p 8000:8000 \
-e TRINO_HOST=host.docker.internal \
-e TRINO_PORT=8080 \
mcp-trino-python \
--transport streamable-http --host 0.0.0.0 --port 8000
Docker Compose
# Start Trino + MCP server with Streamable HTTP
docker-compose up -d
# Start with SSE transport
docker-compose --profile sse up -d
# Run stdio for testing
docker-compose --profile stdio run --rm mcp-trino-stdio
Docker を使った VS Code
{
"mcp": {
"servers": {
"mcp-trino-python": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--network",
"mcp-trino-python_trino-network",
"-e",
"TRINO_HOST=trino",
"-e",
"TRINO_PORT=8080",
"-e",
"TRINO_USER=trino",
"mcp-trino-python"
]
}
}
}
}
設定
環境変数
| 変数 | 説明 | デフォルト |
|---|---|---|
| TRINO_HOST | Trino サーバーのホスト名 | localhost |
| TRINO_PORT | Trino サーバーのポート | 8080 |
| TRINO_USER | Trino のユーザー名 | trino |
| TRINO_CATALOG | デフォルトのカタログ | None |
| TRINO_SCHEMA | デフォルトのスキーマ | None |
| TRINO_HTTP_SCHEME | HTTP スキーム(http/https) | http |
| TRINO_PASSWORD | Trino のパスワード | None |
ツール
クエリと探索のツール
-
show_catalogs
- 利用可能なすべてのカタログを一覧表示します
- パラメーターは不要です
-
show_schemas
- カタログ内のすべてのスキーマを一覧表示します
- パラメーター:
catalog:カタログ名(文字列、必須)
-
show_tables
- スキーマ内のすべてのテーブルを一覧表示します
- パラメーター:
catalog:カタログ名(文字列、必須)schema:スキーマ名(文字列、必須)
-
describe_table
- テーブルの詳細な構造と列の情報を表示します
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
-
execute_query
- SQL クエリを実行し、整形済みの結果を返します
- パラメーター:
query:実行する SQL クエリ(文字列、必須)
-
show_catalog_tree
- カタログ、スキーマ、テーブルの階層ツリーを表示します
- 視覚的なインジケーターを含む、整形済みのツリー構造を返します
- パラメーターは不要です
-
show_create_table
- テーブルの CREATE TABLE ステートメントを表示します
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
-
show_create_view
- ビューの CREATE VIEW ステートメントを表示します
- パラメーター:
view:ビュー名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
-
show_stats
- テーブルの統計情報を表示します
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
Iceberg テーブルのメンテナンス
-
optimize
- 小さなファイルを圧縮して Iceberg テーブルを最適化します
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
-
optimize_manifests
- Iceberg テーブルのマニフェストファイルを最適化します
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
-
expire_snapshots
- Iceberg テーブルから古いスナップショットを削除します
- パラメーター:
table:テーブル名(文字列、必須)retention_threshold:経過時間のしきい値(例:「7d」)(文字列、任意)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
Iceberg メタデータの調査
-
show_table_properties
- Iceberg テーブルのプロパティを表示します
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
-
show_table_history
- Iceberg テーブルの履歴/変更ログを表示します
- スナップショットのタイミング、系譜、先祖に関する情報が含まれます
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
-
show_metadata_log_entries
- Iceberg テーブルのメタデータログエントリーを表示します
- メタデータファイルの場所とシーケンス情報が含まれます
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
-
show_snapshots
- Iceberg テーブルのスナップショットを表示します
- 操作やマニフェストファイルなど、スナップショットの詳細が含まれます
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
-
show_manifests
- 現在またはすべてのスナップショットの Iceberg テーブルマニフェストを表示します
- マニフェストファイルの詳細とデータファイルの統計情報が含まれます
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)all_snapshots:すべてのスナップショットを含める(ブール値、任意)
-
show_partitions
- Iceberg テーブルのパーティションを表示します
- パーティションの統計情報とファイル数が含まれます
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
-
show_files
- 現在のスナップショットにある Iceberg テーブルのデータファイルを表示します
- 詳細なファイルメタデータと列の統計情報が含まれます
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
-
show_entries
- 現在またはすべてのスナップショットの Iceberg テーブルマニフェストエントリーを表示します
- エントリーのステータスと詳細なファイル指標が含まれます
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)all_snapshots:すべてのスナップショットを含める(ブール値、任意)
-
show_refs
- Iceberg テーブルの参照(ブランチとタグ)を表示します
- 参照の設定とスナップショットの対応関係が含まれます
- パラメーター:
table:テーブル名(文字列、必須)catalog:カタログ名(文字列、任意)schema:スキーマ名(文字列、任意)
クエリ履歴
- show_query_history
- 実行済みクエリの履歴を取得します
- パラメーター:
limit:返すクエリの最大数(数値、任意)
ライセンス
このプロジェクトは Apache 2.0 License の下でライセンスされています。利用条件の全文については、LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
