pgmoat について
pgmoat は、AI エージェントに Postgres の読み取り専用アクセスを提供するオープンソースの MCP サーバーです。Postgres パーサーによるクエリ検査に加え、行レベルセキュリティ、データ非表示、予算制限、改ざん検知可能な監査を備えています。
主な機能
- 01読み取り専用のデータベースアクセス
- 02Postgres パーサーによるクエリ検査
- 03指定したテーブルと列の非表示
- 04RLS、行数制限、タイムアウトの適用
- 05検証可能な改ざん検知監査ログ
- 06ロール権限の確認と可視スキーマの出力
活用シーン
- 01エージェントに統制されたデータベース検索を提供
- 02機密列をクエリ結果から隠す
- 03呼び出し元の ID に応じた行レベルセキュリティの適用
- 04監査ログのハッシュチェーンを検証
MCP 対応
pgmoat はツールを通じて、MCP クライアントに統制された Postgres の読み取り専用アクセスを提供する MCP サーバーです。クエリ解析、セキュリティ制御、制限、監査を適用します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
pgmoat
AI エージェント向けの、管理された Postgres アクセス。
pgmoat は、AI エージェントに Postgres への読み取り専用アクセスを提供するオープンソースの MCP サーバーです。すべてのクエリを実際の Postgres パーサーでチェックし、非表示に指定したテーブルやカラムを隠し、行数制限とタイムアウトを適用します。また、呼び出し元の ID に Row-Level Security をバインドし、改ざんを検知できる監査ログを書き込みます。
Node.js 22.12 以降および Postgres 15〜18 が必要です。
クイックスタート
安全なデフォルト設定で、設定ファイルを使わずにデータベースに接続して実行できます。
npx -y pgmoat postgresql://readonly_user:password@localhost:5432/mydb
Claude Code に追加します。
claude mcp add pgmoat -- npx -y pgmoat postgresql://readonly_user:password@localhost:5432/mydb
または、Claude Desktop(claude_desktop_config.json)に追加します。
{
"mcpServers": {
"pgmoat": {
"command": "npx",
"args": ["-y", "pgmoat", "--url-env", "PGMOAT_DATABASE_URL"],
"env": { "PGMOAT_DATABASE_URL": "postgresql://readonly_user:password@localhost:5432/mydb" }
}
}
}
--url-env を使って URL を渡すと、パスワードがプロセス一覧に表示されません。
専用の読み取り専用ロールを使用してください。ロールがスーパーユーザーである場合や、書き込み権限を持つ場合、pgmoat は起動時に警告します。
説明を追加して機密データを非表示にする
export PGMOAT_DATABASE_URL=postgresql://readonly_user:password@localhost:5432/mydb
npx pgmoat init # writes pgmoat.yaml; auto-hides columns like password_hash and token_hash
npx pgmoat validate # checks the file against the schema and the database
npx pgmoat doctor # checks the role for unsafe privileges
npx pgmoat start # starts the server with ./pgmoat.yaml
pgmoat.yaml は次のようになります。
version: 1
server:
name: mydb
connection:
url: ${PGMOAT_DATABASE_URL}
schemas: [public]
mode: read-only
budgets:
max_rows: 200
max_query_ms: 5000
tables:
users:
description: "One row per login account"
columns:
password_hash: { hidden: true }
email: { sensitive: high }
コマンド
| コマンド | 説明 |
|---|---|
pgmoat <postgres-url> | 安全なデフォルト設定で起動します(設定ファイルは不要です) |
pgmoat init | データベースから pgmoat.yaml を作成します |
pgmoat start | pgmoat.yaml から MCP サーバーを起動します |
pgmoat validate | pgmoat.yaml をスキーマおよびデータベースに照らして検証します |
pgmoat doctor | データベースロールに危険な権限がないか確認します |
pgmoat audit verify | 監査ログのハッシュチェーンを検証します |
pgmoat schema-export | 表示対象のスキーマを Markdown として書き出します |
すべてのオプションについては、pgmoat --help を実行してください。
pgmoat が行わないこと
- プロンプトインジェクションを防止するものではありません。 書き込み経路を取り除き、非表示に指定した内容を隠し、返されたデータに信頼できないデータであることを示しますが、ほかのツール(ウェブアクセス、メール)を持つエージェントは、読み取り可能なデータをほかの場所に送信するようだまされる可能性があります。
- Postgres の権限に取って代わるものではありません。 最も強力な制御は、必要な権限だけを付与した専用ロールを使用することです。
- RLS ポリシーが正しいことを保証するものではありません。 ポリシーが参照するセッション変数を設定します。ポリシーに不備があれば、その不備は残ります。
- 障害発生時にリモートの宛先へ監査ログが確実に届くことを保証するものではありません。 バッファリング、アラート、ドロップの記録を行います。
Docker
docker run -i --rm \
-e PGMOAT_DATABASE_URL="postgresql://readonly_user:[email protected]:5432/mydb" \
ghcr.io/kitalon-labs-llc/pgmoat:latest
コントリビューション
CONTRIBUTING.md をご覧ください。脆弱性は SECURITY.md の説明に従って非公開で報告してください。
リンク
- ドキュメント:https://kitalonlabs.com/pgmoat/docs
- ソースと課題:https://github.com/Kitalon-Labs-LLC/pgmoat
- セキュリティ報告:[email protected]
ライセンス
MIT (c) 2026 Kitalon Labs
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。