Integrations
Uses .ENV files for flexible configuration of database connections, server settings, logging preferences, and other environment variables.
Provides tools for interacting with Apache Doris databases, enabling database metadata retrieval, SQL query execution, schema exploration, and audit log retrieval through a standardized Model Control Panel interface.
Implemented using FastAPI to provide both SSE and HTTP streaming endpoints for clients to interact with the MCP protocol, supporting tool calls and prompt interactions.
ドリスMCPサーバー
Doris MCP(モデルコントロールパネル)サーバーは、PythonとFastAPIで構築されたバックエンドサービスです。MCP(モデルコントロールパネル)プロトコルを実装しており、クライアントは定義された「ツール」を介してDorisサーバーと対話できます。主にApache Dorisデータベースへの接続を目的として設計されており、大規模言語モデル(LLM)を活用して、自然言語クエリをSQL(NL2SQL)に変換したり、クエリを実行したり、メタデータの管理と分析を行ったりといったタスクを実行できます。
コア機能
- MCP プロトコル実装: 標準の MCP インターフェイスを提供し、ツール呼び出し、リソース管理、プロンプト対話をサポートします。
- 複数の通信モード:
- SSE (Server-Sent Events) :
/sse
(初期化) および/mcp/messages
(通信) エンドポイント (src/sse_server.py
) を介して提供されます。 - ストリーミング可能な HTTP : 統合された
/mcp
エンドポイントを介して提供され、リクエスト/レスポンスとストリーミングをサポートします (src/streamable_server.py
)。 - (オプション) Stdio : 標準入出力 (
src/stdio_server.py
) を介して対話が可能で、特定の起動構成が必要です。
- SSE (Server-Sent Events) :
- ツールベースのインターフェース:コア機能はMCPツールとしてカプセル化されており、クライアントは必要に応じてツールを呼び出すことができます。現在利用可能な主要なツールは、データベースとの直接的なやり取りに重点を置いています。
- SQL 実行 (
mcp_doris_exec_query
) - データベースとテーブルの一覧表示 (
mcp_doris_get_db_list
、mcp_doris_get_db_table_list
) - メタデータの取得 (
mcp_doris_get_table_schema
、mcp_doris_get_table_comment
、mcp_doris_get_table_column_comments
、mcp_doris_get_table_indexes
) - 監査ログの取得 (
mcp_doris_get_recent_audit_logs
)注: 現在のツールは主に直接的な DB 操作に重点を置いています。
- SQL 実行 (
- データベースインタラクション: Apache Doris (またはその他の互換性のあるデータベース) に接続し、クエリを実行する機能を提供します (
src/utils/db.py
)。 - 柔軟な構成:
.env
ファイルを介して構成され、データベース接続、LLM プロバイダー/モデル、API キー、ログ レベルなどの設定をサポートします。 - メタデータ抽出: データベースのメタデータ情報を抽出できます (
src/utils/schema_extractor.py
)。
システム要件
- Python 3.12以上
- データベース接続の詳細(例:Doris ホスト、ポート、ユーザー、パスワード、データベース)
クイックスタート
1. リポジトリのクローンを作成する
2. 依存関係をインストールする
3. 環境変数を設定する
.env.example
ファイルを.env
にコピーし、環境に応じて設定を変更します。
主要な環境変数:
- データベース接続:
DB_HOST
: データベースのホスト名DB_PORT
: データベースポート(デフォルトは9030)DB_USER
: データベースユーザー名DB_PASSWORD
: データベースパスワードDB_DATABASE
: デフォルトのデータベース名
- サーバー構成:
SERVER_HOST
: サーバーがリッスンするホストアドレス(デフォルト0.0.0.0
)SERVER_PORT
: サーバーがリッスンするポート (デフォルト3000
)ALLOWED_ORIGINS
: CORS で許可されたオリジン(カンマ区切り、*
はすべて許可)MCP_ALLOW_CREDENTIALS
: CORS 資格情報を許可するかどうか (デフォルトはfalse
)
- ログ構成:
LOG_DIR
: ログファイルのディレクトリ(デフォルトは./logs
)LOG_LEVEL
: ログレベル (例:INFO
、DEBUG
、WARNING
、ERROR
、デフォルトはINFO
)CONSOLE_LOGGING
: コンソールにログを出力するかどうか(デフォルトはfalse
)
利用可能なMCPツール
次の表は、MCP クライアント経由で呼び出すことができる主なツールを現在示しています。
ツール名 | 説明 | パラメータ | 状態 |
---|---|---|---|
mcp_doris_get_db_list | サーバー上のすべてのデータベース名のリストを取得します。 | random_string (文字列、必須) | ✅ アクティブ |
mcp_doris_get_db_table_list | 指定されたデータベース内のすべてのテーブル名のリストを取得します。 | random_string (文字列、必須)、 db_name (文字列、オプション、デフォルトは現在のデータベース) | ✅ アクティブ |
mcp_doris_get_table_schema | 指定されたテーブルの詳細な構造を取得します。 | random_string (文字列、必須)、 table_name (文字列、必須)、 db_name (文字列、オプション) | ✅ アクティブ |
mcp_doris_get_table_comment | 指定されたテーブルのコメントを取得します。 | random_string (文字列、必須)、 table_name (文字列、必須)、 db_name (文字列、オプション) | ✅ アクティブ |
mcp_doris_get_table_column_comments | 指定されたテーブル内のすべての列のコメントを取得します。 | random_string (文字列、必須)、 table_name (文字列、必須)、 db_name (文字列、オプション) | ✅ アクティブ |
mcp_doris_get_table_indexes | 指定されたテーブルのインデックス情報を取得します。 | random_string (文字列、必須)、 table_name (文字列、必須)、 db_name (文字列、オプション) | ✅ アクティブ |
mcp_doris_exec_query | SQL クエリを実行し、結果コマンドを返します。 | random_string (文字列、必須)、 sql (文字列、必須)、 db_name (文字列、オプション)、 max_rows (整数、オプション、デフォルト 100)、 timeout (整数、オプション、デフォルト 30) | ✅ アクティブ |
mcp_doris_get_recent_audit_logs | 最近の期間の監査ログ レコードを取得します。 | random_string (文字列、必須)、 days (整数、オプション、デフォルト7)、 limit (整数、オプション、デフォルト100) | ✅ アクティブ |
**注:**すべてのツールは、呼び出し識別子としてrandom_string
パラメータを必要とします。これは通常、MCPクライアントによって自動的に処理されます。「オプション」および「必須」はツールの内部ロジックを参照します。クライアントは、実装によってはすべてのパラメータの値を指定する必要がある場合があります。ここに記載されたツール名は基本名です。接続モードによっては、クライアントにはプレフィックス(例: mcp_doris_stdio3_get_db_list
)が付加されて表示されることがあります。
4. サービスを実行する
SSE モードを使用する場合は、次のコマンドを実行します。
このコマンドは、FastAPI アプリケーションを起動し、デフォルトで SSE と Streamable HTTP MCP サービスの両方を提供します。
サービスエンドポイント:
- SSE 初期化:
http://<host>:<port>/sse
- SSE通信:
http://<host>:<port>/mcp/messages
(POST) - ストリーミング可能な HTTP :
http://<host>:<port>/mcp
(GET、POST、DELETE、OPTIONS をサポート) - ヘルスチェック:
http://<host>:<port>/health
- (潜在的) ステータス チェック:
http://<host>:<port>/status
(main.py
に実装されているかどうかを確認)
使用法
Doris MCPサーバーとのやり取りには、 MCPクライアントが必要です。クライアントはサーバーのSSEまたはStreamable HTTPエンドポイントに接続し、MCP仕様に従ってリクエスト( tool_call
など)を送信してサーバーのツールを呼び出します。
主なインタラクションフロー:
- クライアントの初期化:
/sse
(SSE) に接続するか、/mcp
(Streamable) にinitialize
メソッド呼び出しを送信します。 - (オプション) ツールの検出: クライアントは
mcp/listTools
またはmcp/listOfferings
を呼び出して、サポートされているツールのリスト、その説明、およびパラメーター スキーマを取得できます。 - ツールの呼び出し: クライアントは、
tool_name
とarguments
を指定して、tool_call
メッセージ/要求を送信します。- 例: テーブルスキーマの取得
tool_name
:mcp_doris_get_table_schema
(またはモード固有の名前)arguments
:random_string
、table_name
、db_name
を含めます。
- 例: テーブルスキーマの取得
- ハンドル応答:
- 非ストリーミング: クライアントは
result
またはerror
を含む応答を受信します。 - ストリーミング: クライアントは一連の
tools/progress
通知を受信し、その後にresult
またはerror
を含む最終応答を受信します。
- 非ストリーミング: クライアントは
特定のツール名とパラメータはsrc/tools/
コードから参照するか、MCP 検出メカニズムを介して取得する必要があります。
カーソルで接続する
Stdio モードまたは SSE モードのいずれかを使用して、Cursor をこの MCP サーバーに接続できます。
標準モード
stdioモードでは、Cursorがサーバープロセスを直接管理できます。設定はCursorのMCPサーバー設定ファイル(通常は~/.cursor/mcp.json
など)内で行います。
stdio モードを使用する場合は、次のコマンドを実行して環境依存パッケージをダウンロードしてビルドしてください。ただし、プロジェクト パスを正しいパス アドレスに変更する必要があることに注意してください。
- **カーソルの構成:**カーソル MCP 構成に次のようなエントリを追加します。Copy
- 要点:
/path/to/your/doris-mcp
を、システム上のプロジェクトのルートディレクトリへの実際の絶対パスに置き換えてください。----project
引数は、uv``pyproject.toml
見つけて正しいコマンドを実行するために不可欠です。command``uv
に設定されています(uv.lock
で示されているように、パッケージ管理にuv
を使用していると仮定します)。args``--project
、パス、run
、mcp-doris
(pyproject.toml
で定義されたスクリプトに対応するもの)が含まれます。- データベース接続の詳細(
DB_HOST
、DB_PORT
、DB_USER
、DB_PASSWORD
、DB_DATABASE
)は、設定ファイル内のenv
ブロックに直接設定されます。Cursor はこれらの情報をサーバープロセスに渡します。Cursor 経由で設定する場合、このモードでは.env
ファイルは必要ありません。
SSEモード
SSE モードでは、最初に MCP サーバーを独立して実行し、次に Cursor に接続する方法を指示する必要があります。
- **
.env
を構成する:**データベースの資格情報とその他の必要な設定 (デフォルトの 3000 を使用していない場合はSERVER_PORT
など) が、プロジェクト ディレクトリ内の.env
ファイルで正しく構成されていることを確認します。 - **サーバーを起動する:**プロジェクトのルート ディレクトリでターミナルからサーバーを実行します。このスクリプトは通常、Copy
.env
ファイルを読み取り、FastAPI サーバーを SSE モードで起動します(詳細はスクリプトとsse_server.py
/main.py
参照してください)。サーバーが listen しているホストとポート番号に注意してください(デフォルトは0.0.0.0:3000
です)。 - **カーソルを構成する:**実行中のサーバーの SSE エンドポイントを指す次のようなエントリをカーソル MCP 構成に追加します。注: この例ではデフォルトのポートCopy
3000
使用しています。サーバーが別のポート(例の3010
など)で動作するように設定されている場合は、URL を適宜調整してください。
Cursor でいずれかのモードを設定したら、サーバー (例: doris-stdio
またはdoris-sse
) を選択してそのツールを使用できるようになります。
ディレクトリ構造
新しいツールの開発
このセクションでは、現在のプロジェクト構造を考慮して、新しい MCP ツールを Doris MCP サーバーに追加するプロセスの概要を説明します。
1. ユーティリティモジュールを活用する
新しいデータベース相互作用ロジックを最初から記述する前に、既存のユーティリティ モジュールを確認します。
doris_mcp_server/utils/db.py
: データベース接続 (get_db_connection
) を取得し、生のクエリ (execute_query
、execute_query_df
) を実行するための基本関数を提供します。doris_mcp_server/utils/schema_extractor.py
(MetadataExtractor
クラス) : データベース/テーブルの一覧表示 (get_all_databases
、get_database_tables
)、テーブルスキーマ/コメント/インデックスの取得 (get_table_schema
、get_table_comment
、get_column_comments
、get_table_indexes
)、監査ログへのアクセス (get_recent_audit_logs
) など、データベースメタデータを取得するための高レベルメソッドを提供します。キャッシュメカニズムも備えています。doris_mcp_server/utils/sql_executor_tools.py
(execute_sql_query
関数) :db.execute_query
のラッパーを提供します。セキュリティチェック(オプション、ENABLE_SQL_SECURITY_CHECK
環境変数で制御)、SELECT クエリへの自動LIMIT
の追加、結果のシリアル化(日付、小数点)の処理、MCP 標準の成功/エラー構造への出力のフォーマットが含まれます。ユーザーが指定した SQL または生成された SQL を実行する場合は、このラッパーの使用をお勧めします。
これらのモジュールから機能をインポートして組み合わせ、新しいツールを構築できます。
2. ツールロジックを実装する
新しいツールのコアロジックを、 doris_mcp_server/tools/mcp_doris_tools.py
内のasync
関数として実装します。これにより、主要なツール実装を一元化できます。関数が返すデータは、標準的なMCPレスポンス構造に簡単にラップできる形式でなければなりません(同じファイル内の_format_response
参照してください)。
**例:**シンプルなツールget_server_time
を作成しましょう。
3. ツールを登録する(二重登録)
SSE/Streamable モードと Stdio モードを別々に処理するため、ツールを次の 2 つの場所に登録する必要があります。
A. SSE/Streamable 登録 ( tool_initializer.py
)
mcp_doris_tools.py
から新しいツール関数をインポートします。register_mcp_tools
関数内に、@mcp.tool()
で装飾された新しいラッパー関数を追加します。- ラッパー関数はコア ツール関数を呼び出す必要があります。
- ツール名を定義し、デコレータで詳細な説明(パラメータがある場合はそれも含む)を指定します。クライアントとの互換性を保つため、ラッパーで明示的に使用しない場合でも、必須の
random_string
パラメータの説明を必ず含めてください。
例 ( tool_initializer.py
):
B. 標準入出力登録 ( mcp_core.py
)
- SSE と同様に、
@stdio_mcp.tool()
で装飾された新しいラッパー関数を追加します。 - **重要:**ラッパー関数内にコア ツール関数 (
mcp_doris_get_server_time
) をインポートします (このファイルで使用される遅延インポート パターン)。 - ラッパーはコアツール関数を呼び出します。FastMCP
FastMCP
Stdioモードでツールを処理する方法によっては、ラッパー自体をasync def
で記述する必要がある場合があります。これは、基盤となる関数が単純な場合(現在のファイル構造からわかるように)でも同様です。呼び出しが一致していることを確認してください(例えば、非同期関数を呼び出す場合はawait
を使用してください)。
例 ( mcp_core.py
):
4. 再起動してテストする
両方のファイルにツールを実装して登録した後、MCP サーバーを再起動し ( ./start_server.sh
経由で両方の SSE モードを実行し、必要に応じて Cursor によって使用される Stdio コマンドが更新されていることを確認します)、両方の接続モードで MCP クライアント (Cursor など) を使用して新しいツールをテストします。
貢献
Issue または Pull Request 経由での貢献を歓迎します。
ライセンス
このプロジェクトはApache 2.0ライセンスに基づいてライセンスされています。詳細については、LICENSEファイル(存在する場合)を参照してください。
Related MCP Servers
- -securityAlicense-qualityA Model Context Protocol server that provides access to BigQuery. This server enables LLMs to inspect database schemas and execute queries.Last updated -63PythonMIT License
- AsecurityAlicenseAqualityA Model Context Protocol server that enables LLMs to interact with Salesforce data through SOQL queries, SOSL searches, and various API operations including record management.Last updated -1053PythonMIT License
- -securityFlicense-qualityA Model Context Protocol server providing both read and write access to PostgreSQL databases, enabling LLMs to query data, modify records, and manage database schemas.Last updated -4JavaScript
ZenML MCP Serverofficial
-securityFlicense-qualityA server implementing Model Context Protocol that enables LLMs to interact with the ZenML platform, providing access to pipeline data, stack information, and the ability to trigger new pipeline runs.Last updated -13Python