hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Integrations
Enables querying Parquet files through DuckDB, providing data analysis capabilities on structured files
Allows reading and querying Parquet files stored in Google Cloud Storage buckets
Provides tools for executing SQL queries against PostgreSQL databases, including SELECT, CREATE/INSERT, UPDATE, and DELETE operations
MCP データベース サーバー
mcp-framework
を使用して構築されたモデル コンテキスト プロトコル (MCP) サーバー。データベース (DuckDB 経由の PostgreSQL) および Google Cloud Storage (GCS) と対話するためのツールとリソースを提供します。
前提条件
- Node.js 22以上
- タイプスクリプト
- PostgreSQL(データベース機能に必要)
- Google Cloud 認証情報(オプション、GCS 機能用)
- Devbox (
make
コマンドを使用したローカル開発用)
プロジェクト構造
インストール
- リポジトリをクローンします。Copy
- 依存関係をインストールします (一貫性を保つために Devbox の使用をお勧めします)。Copy
.env.example
を.env
にコピーし、環境変数を入力します。Copy- プロジェクトをビルドします。Copy
構成
環境変数
次の環境変数 (またはコマンドライン引数) を使用してサーバーを構成します。
DATABASE_URL
: PostgreSQL 接続文字列 (supergateway で実行しない限り必須)。DATABASE_URLS
: 複数のデータベース接続のalias=url
ペアのコンマ区切りリスト (DATABASE_URL
の代替)。LOG_LEVEL
: ログレベル(debug
、info
、error
)。デフォルト:info
。GCS_BUCKET
: デフォルトの Google Cloud Storage バケット名 (オプション)。GCP_SERVICE_ACCOUNT
: Base64 でエンコードされた Google Cloud サービス アカウント キー JSON (オプション、GCS 認証用)。GCS_KEY_ID
/GCS_SECRET
: DuckDB のhttpfs
拡張機能専用の代替 GCS 認証情報 (オプション)。TRANSPORT
: トランスポートタイプ(stdio
またはsse
)。デフォルト:stdio
。PORT
: SSEトランスポートのポート番号。デフォルト:3001
。HOST
: SSEトランスポートのホスト名。デフォルト:localhost
。API_KEY
: サーバーを保護するためのオプションの API キー (設定されている場合、クライアントはAuthorization: Bearer <key>
ヘッダーでそれを提供する必要があります)。
コマンドライン引数(例: --port 8080
、 --gcs-bucket my-bucket
)は環境変数を上書きします。詳細はsrc/config.ts
を参照してください。
データベースの移行
このプロジェクトでは、PostgreSQLのスキーマ変更の管理にnode-pg-migrate
使用しています。マイグレーションの実行と作成の詳細については、上記の元のREADMEの「データベースマイグレーション」セクションをご覧ください。
**注:**前述のnpm run setup:db
コマンドは、現在の設定に基づいて確認または更新する必要がある場合があります。
サーバーの実行
便利な開発コマンドにはMakefile
を使用します (Devbox が必要です)。
make
なしで実行するには ( npm run build
の後):
クライアント構成
MCP クライアント (例: mcp-cli
、Claude Desktop) をローカル サーバーに接続するには:
SSE トランスポートの場合 (例: ポート 3001):
(注: 以前の README の Docker/supergateway の例は古くなっているか、別のデプロイメント設定に固有のものである可能性があります。)
Stdio トランスポートの場合:
GitHubからnpxを実行する
npx を使用してサーバーを直接実行できます (パッケージ内のビルド ステップが必要です)。
利用可能なツール
duckdb_insert
: DuckDBを介して接続されたPostgreSQLデータベースに対してINSERT
文を実行します。INSERTINSERT
のみが許可されます。duckdb_query
: DuckDBのpostgres_query
関数を使用して、接続されたPostgreSQLデータベース(postgres_db
)に対して読み取り専用のSQLクエリを直接実行します。修飾されていないテーブル名には自動的にプレフィックスが付けられます(例:my_table``postgres_db.public.my_table
になります)。duckdb_read_parquet
: DuckDB を使用して (設定されている場合は GCS から) Parquet ファイルをクエリします。gcs_directory_tree
: ページ区切りをサポートする GCS バケットからディレクトリ ツリー構造を取得します。
利用可能なリソース
mcp://gcs/objects
(gcs_objects
): 設定された GCS バケット内のオブジェクトを一覧表示します。mcp://db/tables
(sql_tables
): 構成された PostgreSQL データベース内のすべてのテーブルとその列を一覧表示します。
開発:新しいツール/リソースの統合
このプロジェクトはmcp-framework
を使用しています。新しいツールまたはリソースを追加するには:
- クラスを作成します:
src/tools/
またはsrc/resources/
に新しい.ts
ファイルを作成します。MCPTool
またはMCPResource
を拡張するクラスを定義します。- 必要なプロパティ (ツールの場合は
name
、description
、schema
) とメソッド (ツールの場合はexecute
、リソースの場合はread
) を実装します。 - 入力検証 (ツール) には、
schema
プロパティで Zod を使用します。 - クラス内の依存関係 (DB 接続や GCS クライアントなど) を初期化します。多くの場合、コンストラクター内で、
src/services/
のサービスまたはsrc/config.ts
の構成を使用する可能性があります。
サンプルツール (
src/tools/my_tool.ts
):Copy - 自動検出:
mcp-framework``src/tools
およびsrc/resources
ディレクトリ内のファイルからデフォルトでエクスポートされるツール/リソース クラスを自動的に検出して登録します。- 新しいクラスがファイル内の
default export
であることを確認します。
- テスト:
- サーバーを実行します (
make dev
)。 - 起動ログをチェックして、新しいツール/リソースがリストされていることを確認します。
- MCP クライアント (
mcp-cli
や MCP Inspector など) を使用してツールを呼び出すか、リソースを読み取ってその機能を検証します。
- サーバーを実行します (
ベストプラクティス
- ツール用の Zod を使用して明確な入力スキーマを定義します。
execute
/read
内でエラーを適切に処理し、formatErrorResponse
を使用してフォーマットされたエラー応答を返します (またはエラーをスローします)。- 必要に応じて、
getConfig()
を介して集中構成 (src/config.ts
) を使用します。 - データベース接続などの依存関係には、
src/services/
内のサービス初期化子を活用します。 - 可視性のためにログ (
console.error
) を追加します。
This server cannot be installed
PostgreSQL、DuckDB、Google Cloud Storage Parquet ファイルなどのデータベースと対話するためのツールを提供するモデル コンテキスト プロトコル サーバー。