db-metadata-extractor-mcp について
PostgreSQL、Snowflake、SQL Server、BigQuery、Oracleのスキーマメタデータを抽出・検索するMCPサーバーです。開発者やデータベース担当者向けに、メタデータをローカルのJSONとして保存し、絞り込みやページ分割に対応します。
主な機能
- 015種類のデータベースに対応
- 02テーブル、列、キー、索引、制約を抽出
- 03メタデータをローカルJSONに保存
- 04テーブル名や列名で検索
- 05メタデータをページ分割して表示
活用シーン
- 01データベーススキーマをローカルに記録
- 02抽出済みメタデータから表や列を検索
- 03指定したスキーマやテーブルを抽出
- 04大規模スキーマをページ単位で閲覧
MCP 対応
MCPクライアントに `extract_metadata` と `query_metadata` ツールを提供します。stdioとHTTPのトランスポートに対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-name: io.github.Optisol-Business/db-metadata-extractor-mcp
Database Metadata Extractor MCP Server
PostgreSQL、Snowflake、SQL Server、BigQuery、Oracle データベースからデータベーススキーマのメタデータを抽出して検索する、Model Context Protocol(MCP)サーバーです。
機能
- ✅ 複数データベース対応:PostgreSQL、Snowflake、SQL Server(MSSQL)、BigQuery、Oracle
- ✅ 完全なスキーマ抽出:テーブル、列、主キー、インデックス、制約
- ✅ ローカル JSON 出力:メタデータをローカルフォルダーに直接保存します(クラウドは不要です)
- ✅ クエリインターフェース:テーブル名/列名でメタデータを検索、フィルタリングします
- ✅ ページネーション対応:大規模なスキーマを効率的に閲覧できます
- ✅ VS Code 連携:VS Code Agent Mode で動作します
- ✅ CLI のカスタマイズ:トランスポートオプション(stdio、HTTP)
インストール
PyPI から
pip install db-metadata-extractor-mcp
ソースから
git clone https://github.com/Optisol-Business/db-metadata-extractor-mcp.git
cd db-metadata-extractor-mcp
pip install -e .
クイックスタート
1. MCP サーバーを起動する
db-metadata-extractor-mcp
サーバーはデフォルトで stdio モードで起動し、MCP クライアントからの接続を待ち受けます。
2. Claude Desktop で設定する
~/.config/Claude/claude_desktop_config.json(macOS/Linux)または %APPDATA%\Claude\claude_desktop_config.json(Windows)に追加します。
{
"mcpServers": {
"db-metadata-extractor": {
"command": "db-metadata-extractor-mcp",
"args": [],
"env": {}
}
}
}
Claude Desktop を再起動します。
3. Claude で使用する
Claude に次のように伝えます。
PostgreSQL データベースからメタデータを抽出して、
/tmp/outputに保存してください
Claude はサーバーのツールを使って、データベーススキーマを抽出し、検索します。
ツール
extract_metadata
データベースから完全なスキーマメタデータを抽出します。
パラメーター:
db_type(必須):postgresql、snowflake、sqlserver、bigquery、oracleoutput_path(必須):JSON 出力先のローカルディレクトリdatabase_name:データベース/スキーマ名host:データベースホスト(BigQuery/Snowflake では不要)port:データベースポートusername:データベースユーザーpassword:データベースパスワードschema_name:特定のスキーマ(任意)tables:抽出するテーブル名の配列(任意)account:Snowflake アカウント IDwarehouse:Snowflake ウェアハウスrole_name:Snowflake ロールproject_id:BigQuery プロジェクト IDservice_account_key:BigQuery サービスアカウントの JSON(Base64 エンコード)
戻り値:
- メタデータの保存先ファイルパス
- 概要統計(テーブル数、列数など)
query_metadata
以前に抽出したメタデータを検索します。
パラメーター:
filepath(必須):メタデータ JSON ファイルのパスtable_name:テーブル名でフィルタリング(部分一致)field_name:列名でフィルタリング(部分一致)page:ページ番号(デフォルト:1)page_size:1 ページあたりの結果数(デフォルト:20)
戻り値:
- フィルター条件に一致する、ページ分割されたテーブルの結果
使用例
PostgreSQL
# Via Claude
"Extract all tables from my dev PostgreSQL database at localhost:5432"
Claude が使用するパラメーター:
{
"db_type": "postgresql",
"host": "localhost",
"port": 5432,
"database_name": "dev_db",
"username": "postgres",
"password": "your_password",
"output_path": "/tmp/db_metadata"
}
Snowflake
"Extract schema from Snowflake account XYZ123"
パラメーター:
{
"db_type": "snowflake",
"account": "XYZ123",
"username": "your_user",
"password": "your_password",
"warehouse": "COMPUTE_WH",
"role_name": "ANALYST",
"database_name": "PRODUCTION",
"output_path": "C:/metadata"
}
BigQuery
"Extract metadata from BigQuery project my-project-123"
パラメーター:
{
"db_type": "bigquery",
"project_id": "my-project-123",
"service_account_key": "base64_encoded_json_key",
"output_path": "/tmp/bq_metadata"
}
高度な使い方
カスタムトランスポート
HTTP トランスポートで起動します。
db-metadata-extractor-mcp --transport streamable-http --port 3000
環境変数
# Set database credentials via env
export DB_HOST=localhost
export DB_USER=postgres
export DB_PASSWORD=secret
db-metadata-extractor-mcp
出力形式
抽出したメタデータは、次の構造の JSON ファイルとして保存されます。
{
"source": {
"db_type": "postgresql",
"extracted_at": "2026-04-09T14:30:00",
"host": "localhost"
},
"schemas": [
{
"schema_name": "public",
"tables": [
{
"table_name": "users",
"columns": [
{
"column_name": "id",
"data_type": "int",
"is_nullable": false,
"is_primary_key": true
},
{
"column_name": "email",
"data_type": "varchar",
"is_nullable": false
}
],
"indexes": [
{
"index_name": "users_email_idx",
"columns": ["email"]
}
]
}
]
}
]
}
要件
- Python 3.8+
- PostgreSQL の場合:
psycopg2-binary - Snowflake の場合:
snowflake-connector-python - SQL Server の場合:
pyodbc、pymssql - BigQuery の場合:
google-cloud-bigquery - Oracle の場合:
oracledb
トラブルシューティング
接続エラー
問題:「データベースに接続できません」
解決方法:認証情報とネットワークアクセスを確認します。
# Test PostgreSQL connection
psql -h localhost -U postgres -c "SELECT 1"
# Test Snowflake
snowsql -a XYZ123 -u your_user
権限エラー
問題:「アクセスが拒否されました」または「権限が不十分です」
解決方法:データベースユーザーに次の権限があることを確認します。
- テーブルに対する
SELECT - スキーマに対する
USAGE - データベースに対する
CONNECT
大規模スキーマのタイムアウト
問題:大規模なデータベースで抽出がタイムアウトします
解決方法:特定のスキーマ/テーブルを抽出します。
{
"schema_name": "public",
"tables": ["users", "orders"] // Specify subset
}
ライセンス
MIT License - LICENSE ファイルを参照してください
貢献
貢献を歓迎します。次の手順でお願いします。
- リポジトリをフォークします
- 機能ブランチを作成します
- プルリクエストを送信します
Support
- GitHub Issues: https://github.com/Optisol-Business/db-metadata-extractor-mcp/issues
- Documentation: See MCP_REGISTRY_GUIDE.md
Links
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。