mcpField
P
PostgreSQL MCP Server

PostgreSQL MCP Server

ローカル
github.com/musaddiq-devデータベース123 週間前に更新

PostgreSQL MCP Server について

PostgreSQL のスキーマ確認やデータベース照会に使える Python 製 MCP サーバーです。読み取り専用の分析ツールに加え、データやスキーマを変更できる書き込みツールも別途備えています。

主な機能

  1. 01テーブルとスキーマの確認
  2. 02行数制限付きの読み取り専用 SQL 実行
  3. 03クエリプランの説明
  4. 04リレーションとインデックスの確認
  5. 05行のプレビューと SQL ルーチン検索
  6. 06テーブルメタデータのリソース参照

活用シーン

  1. 01未知のデータベーススキーマの調査
  2. 02クエリプランとインデックス詳細の確認
  3. 03分析用データの件数を制限した取得

MCP 対応

MCP クライアントに PostgreSQL の確認・照会ツールと、テーブル一覧およびスキーマのリソースを提供します。読み取りクエリは読み取り専用トランザクションで実行され、別の書き込みツールはデータベースユーザーの権限に応じてデータやスキーマを変更できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"musaddiq-dev-postgresql": {
"command": "uvx",
"args": [
"mdev-postgresql-mcp-server"
],
"env": {
"POSTGRES_HOST": "<POSTGRES_HOST>",
"POSTGRES_PORT": "<POSTGRES_PORT>",
"POSTGRES_USER": "<POSTGRES_USER>",
"POSTGRES_PASSWORD": "<POSTGRES_PASSWORD>",
"POSTGRES_DB": "<POSTGRES_DB>",
"POSTGRES_READ_QUERY_LIMIT": "<POSTGRES_READ_QUERY_LIMIT>"
}
}
}
}
起動コマンドuvx mdev-postgresql-mcp-server
設定が必要な環境変数
POSTGRES_HOSTPostgreSQL host
POSTGRES_PORTPostgreSQL port
POSTGRES_USERPostgreSQL username
POSTGRES_PASSWORDシークレットPostgreSQL password
POSTGRES_DBPostgreSQL database name
POSTGRES_READ_QUERY_LIMITMaximum rows returned by read queries

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypimdev-postgresql-mcp-server0.1.2

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

PostgreSQL MCP Server

MCP 対応クライアントから PostgreSQL データベースを調査・クエリするための Python 製 Model Context Protocol(MCP)サーバーです。スキーマの検出、安全な読み取り専用クエリの実行、クエリの説明、テーブルのプレビュー、インデックスの分析、リレーションシップの調査、テーブルメタデータ用の PostgreSQL リソースを提供します。

機能

  • public テーブルの一覧表示とテーブルスキーマの確認
  • PostgreSQL の読み取り専用トランザクションで読み取り専用 SQL を実行
  • 対象クエリを直接実行せずにクエリプランを説明
  • 固定の上限でテーブルの行をプレビュー
  • 外部キーのリレーションシップとインデックスを確認
  • テーブル一覧とスキーマの詳細を受動的な MCP リソースとして公開

安全性モデル

postgresql_execute_read_query は PostgreSQL の読み取り専用トランザクションモードで実行され、POSTGRES_READ_QUERY_LIMIT によって返される行数が制限され、実行後にロールバックされます。また、このサーバーには postgresql_execute_write_query も含まれており、単一の INSERT、UPDATE、DELETE、CREATE、ALTER、DROP、または TRUNCATE ステートメントのみを受け付けます。接続先のデータベースユーザーに権限がある場合、データやスキーマを変更できます。MCP クライアントで書き込み可能なツールを自動承認しないでください。公開または共有して使用する場合は、専用の読み取り専用 PostgreSQL ユーザーでサーバーを実行してください。

要件

  • Python 3.11+
  • PostgreSQL データベース
  • Claude Desktop、Cursor、VS Code などの MCP 対応クライアント、またはその他の MCP ホスト

インストール

PyPI に公開された後は、標準的な Python MCP パッケージと同様にサーバーをインストールまたは実行できます。

uvx mdev-postgresql-mcp-server

ソースからローカルで開発する場合:

git clone https://github.com/musaddiq-dev/postgresql-mcp-server.git
cd postgresql-mcp-server
python -m venv .venv
source .venv/bin/activate
pip install -e .

設定

環境ファイルのサンプルをコピーし、データベース接続情報を更新してください。

cp .env.example .env
変数説明必須デフォルト
POSTGRES_HOSTPostgreSQL ホストはいlocalhost
POSTGRES_PORTPostgreSQL ポートはい5432
POSTGRES_USERPostgreSQL ユーザー名はいなし
POSTGRES_PASSWORDPostgreSQL パスワードいいえなし
POSTGRES_DBPostgreSQL データベース名はいなし
LOG_LEVELstderr に出力する Python ログレベルいいえINFO
POSTGRES_READ_QUERY_LIMIT読み取りクエリで返される最大行数いいえ1000

読み取り専用ユーザーの例:

CREATE USER mcp_readonly WITH PASSWORD 'change-me';
GRANT CONNECT ON DATABASE your_database TO mcp_readonly;
GRANT USAGE ON SCHEMA public TO mcp_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO mcp_readonly;

実行

mdev-postgresql-mcp-server

PyPI 公開前にローカルチェックアウトから実行する場合:

python -m postgresql_mcp_server.server

MCP クライアントの設定

公開済みのインストールでは、uvx の使用を推奨します。stdio を使用する MCP サーバーは、プロトコルメッセージのみを stdout に書き込む必要があります。このサーバーは Python のロギングを通じてログを stderr に書き込みます。

Claude Desktop / Cursor / Windsurf / Cline

ほとんどの MCP クライアントは、次の mcpServers JSON 形式を受け付けます。

{
  "mcpServers": {
    "postgresql": {
      "command": "uvx",
      "args": ["mdev-postgresql-mcp-server"],
      "env": {
        "POSTGRES_HOST": "localhost",
        "POSTGRES_PORT": "5432",
        "POSTGRES_USER": "mcp_readonly",
        "POSTGRES_PASSWORD": "change-me",
        "POSTGRES_DB": "your_database"
      }
    }
  }
}

このリポジトリでローカル開発する場合は、代わりにインストール済みのコンソールスクリプトのパスを使用してください。

{
  "mcpServers": {
    "postgresql": {
      "command": "/absolute/path/to/postgresql-mcp-server/.venv/bin/mdev-postgresql-mcp-server",
      "args": [],
      "env": {
        "POSTGRES_HOST": "localhost",
        "POSTGRES_PORT": "5432",
        "POSTGRES_USER": "mcp_readonly",
        "POSTGRES_PASSWORD": "change-me",
        "POSTGRES_DB": "your_database"
      }
    }
  }
}
Claude Code CLI
claude mcp add postgresql \
  --env POSTGRES_HOST=localhost \
  --env POSTGRES_PORT=5432 \
  --env POSTGRES_USER=mcp_readonly \
  --env POSTGRES_PASSWORD=change-me \
  --env POSTGRES_DB=your_database \
  -- uvx mdev-postgresql-mcp-server
VS Code MCP

VS Code の MCP 設定では、同じコマンド/引数/環境変数の形式を使用します。

{
  "servers": {
    "postgresql": {
      "type": "stdio",
      "command": "uvx",
      "args": ["mdev-postgresql-mcp-server"],
      "env": {
        "POSTGRES_HOST": "localhost",
        "POSTGRES_PORT": "5432",
        "POSTGRES_USER": "mcp_readonly",
        "POSTGRES_PASSWORD": "change-me",
        "POSTGRES_DB": "your_database"
      }
    }
  }
}

ツール

ツール用途安全性
postgresql_list_tablespublic のベーステーブルを一覧表示読み取り専用
postgresql_describe_tableテーブルのカラムとメタデータを表示読み取り専用
postgresql_execute_read_query読み取り専用トランザクションモードで、件数を制限して SQL を実行読み取り専用
postgresql_execute_write_query承認された単一の変更 SQL ステートメントを実行してコミット破壊的
postgresql_explain_query単一のクエリに対する PostgreSQL の EXPLAIN 出力を返す読み取り専用
postgresql_get_database_summaryデータベースのバージョンとテーブル数を返す読み取り専用
postgresql_get_relationships外部キーのリレーションシップを確認読み取り専用
postgresql_analyze_indexesインデックスとサイズを確認読み取り専用
postgresql_preview_tableテーブルから最大 10 行を返す読み取り専用
postgresql_search_sql_definitionspublic の SQL ルーチン/関数を検索読み取り専用

リソース

  • postgres://list_tables は public テーブル名を返します。
  • postgres://schema/{table_name} はテーブルの生成済みスキーマステートメントを返します。

スモークチェック

データベースを使用せずに、次のコマンドで構文を確認します。

python -m py_compile src/postgresql_mcp_server/server.py

設定済みのデータベースがある場合は、サーバーを起動し、MCP クライアントを使って list_tables を呼び出します。

配布

このサーバーは、標準的な Python MCP 配布経路を通じて公開されています。

  • PyPI パッケージ:mdev-postgresql-mcp-server
  • MCP Registry 名:io.github.musaddiq-dev/postgresql-mcp-server
  • ランタイムのヒント:uvx
  • トランスポート:stdio

この README の先頭にある mcp-name マーカーは、MCP Registry の所有権確認に必要です。ユーザーは、ローカルの MCP クライアント設定で uvx mdev-postgresql-mcp-server を使用することを推奨します。

セキュリティに関する注意事項

  • 認証情報が含まれる .env や MCP クライアント設定をコミットしないでください。
  • 最小権限のデータベースユーザーを使用してください。
  • execute_write_query は破壊的な操作として扱い、MCP クライアントでユーザーの明示的な承認を必須にしてください。
  • 書き込み可能なツールを実行する前に、生成された SQL を確認してください。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。