MCP データベース サーバー
mcp-frameworkを使用して構築されたモデル コンテキスト プロトコル (MCP) サーバー。データベース (DuckDB 経由の PostgreSQL) および Google Cloud Storage (GCS) と対話するためのツールとリソースを提供します。
前提条件
Node.js 22以上
タイプスクリプト
PostgreSQL(データベース機能に必要)
Google Cloud 認証情報(オプション、GCS 機能用)
Devbox (
makeコマンドを使用したローカル開発用)
プロジェクト構造
インストール
リポジトリをクローンします。
git clone <repository-url> cd mcp-db依存関係をインストールします (一貫性を保つために Devbox の使用をお勧めします)。
devbox install # Or using npm directly if not using Devbox # npm install.env.exampleを.envにコピーし、環境変数を入力します。cp .env.example .env # Edit .env with your detailsプロジェクトをビルドします。
# Using make (requires Devbox) make build # Or using npm directly # npm run build
構成
環境変数
次の環境変数 (またはコマンドライン引数) を使用してサーバーを構成します。
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 ファイルをクエリします。duckdb_update: DuckDB を介して接続された PostgreSQL データベースに対してUPDATEステートメントを実行します。gcs_directory_tree: ページ区切りをサポートする GCS バケットからディレクトリ ツリー構造を取得します。
利用可能なリソース
mcp://gcs/objects: 設定された GCS バケット内のオブジェクトを一覧表示します。mcp://db/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の構成を使用する可能性があります。
サンプルツール (
import { MCPTool } from "mcp-framework"; import { z } from "zod"; import { formatSuccessResponse } from "../utils.js"; import { getDuckDBConnection } from "../services/duckdb.js"; // Example dependency const MyToolInputSchema = z.object({ param1: z.string().describe("Description for parameter 1"), }); type MyToolInput = z.infer<typeof MyToolInputSchema>; export class MyTool extends MCPTool<MyToolInput> { name = "my_tool"; description = "Description of what my tool does."; schema = { // Matches Zod schema structure param1: { type: z.string(), description: "Description for parameter 1" }, }; async execute(args: MyToolInput): Promise<any> { console.error(`Handling tool request: ${this.name}`); const duckDBConn = getDuckDBConnection(); // Get dependency // ... implement logic using args and duckDBConn ... const result = { message: `Processed ${args.param1}` }; return formatSuccessResponse(result); } } export default MyTool; // Ensure default export自動検出:
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
Related Resources
Related MCP Servers
- -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 -2299
- AsecurityAlicenseAqualityA Model Context Protocol server that enables powerful PostgreSQL database management capabilities including analysis, schema management, data migration, and monitoring through natural language interactions.Last updated -2,66018944137AGPL 3.0
- -securityFlicense-qualityA Model Context Protocol server that provides tools for connecting to and interacting with various database systems (SQLite, PostgreSQL, MySQL/MariaDB, SQL Server) through a unified interface.Last updated -3
- -securityFlicense-qualityA Model Context Protocol server that enables performing PostgreSQL database operations (create, read, update, delete) on User and Post entities through MCP tools.Last updated -472