mcpField
P
PostgreSQL MCP Server

PostgreSQL MCP Server

ローカル
github.com/SwanHtetAungPhyoデータベース173 週間前に更新

PostgreSQL MCP Server について

AI アシスタントから PostgreSQL のデータや操作にアクセスするための Go 製 MCP サーバーです。読み取り、スキーマ変更、データ変更を別々のツールに分け、SQL を検証して危険な操作を制限します。

主な機能

  1. 01SELECT クエリの実行
  2. 02データベーススキーマの作成・変更
  3. 03レコードの挿入・更新・削除
  4. 04ツール種別に応じた SQL 検証
  5. 05危険な管理操作のブロック
  6. 06PostgreSQL SSL 接続のサポート

活用シーン

  1. 01分析用の業務データの照会
  2. 02ユーザーや在庫情報の確認
  3. 03スキーマやデータレコードの変更

MCP 対応

MCP クライアントに execute_query、ddl_query、modify_query ツールを公開し、読み取り、スキーマ管理、データ変更を行います。

設定

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

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

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

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

詳細

PostgreSQL MCP Server

Go PostgreSQL MCP License Go Report Card

作者:Swan Htet Aung Phyo

AGH コンピューターサイエンス専攻の学生(バックエンド開発者)

AI アシスタントが、明確で標準化されたインターフェースを通じて PostgreSQL データベースを操作できる、安全で効率的な MCP サーバーです。

セキュリティを心配せずに、AI アシスタントにデータベースをクエリする機能を与えたいと思ったことはありませんか?この MCP サーバーがまさにその答えです。データを安全に保ちながら、AI モデルが PostgreSQL データベースを操作できる安全な方法を提供します。

これはどのようなものですか?

Model Context Protocol(MCP)は、AI アシスタントが外部データソースに接続するための標準になりつつあります。このサーバーは、PostgreSQL データベース向けに MCP を実装し、主に次の 3 つの機能を提供します。

  • データをクエリする - AI アシスタントに SELECT クエリを実行させ、情報を検索できます
  • スキーマを管理する - 必要に応じてデータベース構造を作成、変更、削除できます
  • データを更新する - 適切な検証を行いながら、レコードを挿入、更新、削除できます

何より、危険な操作を防ぐため、すべての処理が検証され、制限されています。誤って DROP DATABASE コマンドを実行してしまうことはありません!

はじめに

必要なもの
  • Go 1.19 以降がインストールされたマシン
  • PostgreSQL データベース(バージョン 13 以降を推奨)
  • セットアップに約 5 分
インストール

まず、プロジェクトを作成します。

mkdir postgresql-mcp-server
cd postgresql-mcp-server
go mod init postgresql-mcp-server

次に、依存関係を取得します。

go get github.com/metoro-io/mcp-golang
go get github.com/metoro-io/mcp-golang/transport/stdio
go get gorm.io/driver/postgres
go get gorm.io/gorm

メインサーバーのコードを main.go にコピーし、データベース接続を更新します。

const dbConn = "host=localhost user=postgres password=yourpassword dbname=yourdb port=5432 sslmode=disable"

ビルドして実行します。

go build -o postgresql-mcp-server
./postgresql-mcp-server

これで完了です!サーバーが起動し、接続を受け付ける準備ができているはずです。

使い方

このサーバーは、データベース操作の種類に応じた 3 つの主要なツールを提供します。

データの読み取り(execute_query)

おそらく最もよく使う機能です。SELECT クエリを実行して情報を取得できます。

-- Find all active users
SELECT name, email FROM users WHERE active = true;

-- Get sales summary for the last month
SELECT 
    product_name,
    SUM(quantity) as total_sold,
    AVG(price) as avg_price
FROM sales 
WHERE created_at >= '2024-01-01'
GROUP BY product_name
ORDER BY total_sold DESC;

結果は見やすく整形されるため、AI アシスタントがデータを理解して扱いやすくなります。

データベース構造の管理(ddl_query)

テーブルの作成やスキーマの変更が必要ですか?このツールで DDL 操作を行えます。

-- Create a new table
CREATE TABLE blog_posts (
    id SERIAL PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT,
    author_id INTEGER REFERENCES users(id),
    published_at TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Add an index for better performance
CREATE INDEX idx_posts_author ON blog_posts(author_id);

-- Modify existing table
ALTER TABLE users ADD COLUMN last_login TIMESTAMP;
データの変更(modify_query)

データの挿入、更新、削除が必要な場合に使用します。

-- Add new records
INSERT INTO users (name, email, active) 
VALUES ('Alice Johnson', '[email protected]', true);

-- Update existing data
UPDATE products 
SET price = price * 0.9 
WHERE category = 'electronics' AND stock > 100;

-- Clean up old data
DELETE FROM logs WHERE created_at < NOW() - INTERVAL '90 days';

セキュリティ機能

このサーバーの開発では、セキュリティを重要な考慮事項としました。データを安全に保つための仕組みは次のとおりです。

クエリの検証:実行前にすべてのクエリを確認します。各ツールで許可される SQL 文の種類は限定されています。クエリツールから誤って DROP TABLE コマンドを実行することはできません。

危険な操作の禁止:TRUNCATE、GRANT などのコマンドやその他の管理機能は、すべてブロックされます。

接続のセキュリティ:SSL サポートを含む、PostgreSQL 標準の接続セキュリティを使用します。

入力のサニタイズ:すべてのクエリに対し、GORM に組み込まれた SQL インジェクション対策が適用されます。

設定オプション

データベース接続

接続文字列には、標準の PostgreSQL 形式を使用します。

host=localhost user=myuser password=mypass dbname=mydb port=5432 sslmode=require

本番環境では、次のセキュリティ設定を検討してください。

// Production example
const dbConn = "host=db.example.com user=mcp_user password=secure_password dbname=production_db port=5432 sslmode=require"
環境変数

セキュリティを強化するには、認証情報をコードに直接記述する代わりに、環境変数を使用するとよいでしょう。

import "os"

func getDBConnection() string {
    host := os.Getenv("DB_HOST")
    user := os.Getenv("DB_USER")
    password := os.Getenv("DB_PASSWORD")
    dbname := os.Getenv("DB_NAME")
    port := os.Getenv("DB_PORT")
    
    return fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=require", 
        host, user, password, dbname, port)
}

MCP クライアントへの接続

Claude Desktop

claude_desktop_config.json に次の設定を追加します。

{
  "mcpServers": {
    "postgresql": {
      "command": "/path/to/your/postgresql-mcp-server",
      "args": []
    }
  }
}
その他の MCP クライアント

ほとんどの MCP クライアントでは、同様の設定形式を使用します。

{
  "servers": [
    {
      "name": "postgresql-db",
      "transport": "stdio", 
      "command": ["/path/to/postgresql-mcp-server"]
    }
  ]
}

実際の使用例

このサーバーの実用的な使用方法をいくつか紹介します。

ビジネスインテリジェンスのクエリ
-- Monthly revenue trend
SELECT 
    DATE_TRUNC('month', order_date) as month,
    SUM(total_amount) as revenue,
    COUNT(*) as order_count
FROM orders 
WHERE order_date >= '2024-01-01'
GROUP BY month
ORDER BY month;
ユーザー分析
-- Active users by registration date
SELECT 
    DATE(created_at) as signup_date,
    COUNT(*) as new_users,
    SUM(COUNT(*)) OVER (ORDER BY DATE(created_at)) as cumulative_users
FROM users 
WHERE created_at >= '2024-01-01'
GROUP BY signup_date
ORDER BY signup_date;
在庫管理
-- Low stock alert
SELECT 
    product_name,
    current_stock,
    min_stock_level,
    (min_stock_level - current_stock) as shortage
FROM inventory 
WHERE current_stock < min_stock_level
ORDER BY shortage DESC;

よくある問題と解決策

接続の問題:データベースに接続できない場合は、接続文字列をもう一度確認してください。PostgreSQL が起動しており、指定したポートで接続を受け付けていることを確認してください。

権限エラー:データベースユーザーには、実行する操作に応じた適切な権限が必要です。読み取り専用アクセスの場合は、SELECT 権限で十分です。すべての機能を利用するには、CREATE、INSERT、UPDATE、DELETE 権限が必要です。

クエリが拒否される:クエリが拒否された場合は、適切なツールを使用しているか確認してください。SELECT クエリは execute_query に、CREATE/ALTER/DROP は ddl_query に渡します。

パフォーマンスの問題:大規模なデータセットの場合は、クエリに LIMIT 句を追加することを検討してください。このサーバーは結果セットを自動的に制限しないため、数百万行を返すクエリは遅くなることがあります。

パフォーマンスのヒント

  • 頻繁にクエリする列にインデックスを使用します
  • 大規模なデータセットには LIMIT 句を追加します
  • 複雑なクエリの最適化には EXPLAIN の使用を検討します
  • ANALYZE を実行して、PostgreSQL の統計情報を最新の状態に保ちます

貢献

バグを見つけた場合や、機能を追加したい場合は、ぜひご貢献ください。手順は以下のとおりです。

  1. リポジトリをフォークします
  2. 機能ブランチを作成します(git checkout -b feature/cool-new-feature)
  3. 変更を加えます
  4. 十分にテストします
  5. 変更をコミットします(git commit -am 'Add cool new feature')
  6. ブランチにプッシュします(git push origin feature/cool-new-feature)
  7. プルリクエストを作成します

コードが Go の規約に従い、適切なエラー処理を含んでいることを確認してください。

ライセンス

このプロジェクトは MIT License のもとで公開されています。詳細については LICENSE ファイルを参照してください。

タグ

#mcp #postgresql #golang #ai #database #model-context-protocol #sql #gorm #claude #assistant #server #api #data #query #secure #open-source


ご質問はありますか? GitHub でイシューを作成するか、ディスカッションを開始してください。サポートいたします。

コメント

MCP は初めてですか?

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

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