Model Context ProtocolでPostgreSQL Serverを実行する
皆さんこんにちは。廣瀬製紙株式会社 稼働率向上PJチームのAMです。
最近、生成AIの世界で注目を集めているModel Context Protocol (MCP)について、実際にPostgreSQLサーバーの実行方法をご紹介したいと思います。
MCPは、生成AIモデル「Claude」で知られるAnthropic社がオープンソースとして開発した規格で、今とても話題になっています。私自身も色々と試してみましたが、その可能性の大きさを感じています。
ありがたいことに公式のGitリポジトリでPostgreSQL Server実行環境用のDockerfileが提供されているので、今回はDockerを使った方法で進めていきたいと思います。
実際の手順に入る前に、いくつかの準備が必要になります。具体的には以下の3つのインストールが必要です:
- 1. Claude for Desktop
- 2. Docker Desktop
- 3. PostgreSQL
それぞれのインストール方法や設定について詳しく解説していきますので、順番に進めていただければと思います。まずは基本的な環境を整えることから始めましょう! もちろんすでにインストール済みの方は読み飛ばしていただいて結構です。
それでは、具体的な手順の解説に入っていきましょう。
目次
事前準備
Model Context Protocol(MCP)でPostgreSQLを実行するにあたって、まずは3つのソフトウェアをインストールする必要があります。
1つ目は「Claude for Desktop」です。これはAnthropic社が提供する強力なAIアシスタント「Claude」のデスクトップアプリケーションです。
2つ目は「Docker Desktop」です。コンテナ環境を手軽に構築できるDockerの公式デスクトップアプリケーションで、今回はMCP Serverの実行環境として利用します。
3つ目は「PostgreSQL」です。オープンソースの関係データベース管理システムで、今回はデータの保存先として使用します。
これら3つのソフトウェアを正しくインストールすることで、MCPを使ってClaudeからPostgreSQLのデータを操作する環境が整います。インストール方法の詳細については、順を追って説明していきます。
Claude for Desktopのインストール
まずはClaude for Desktopのインストールを行いましょう。公式サイトからインストーラーをダウンロードできます。Windows版とmacOS版が用意されているので、お使いの環境に合わせてダウンロードしてください。
インストールが完了したら、重要な設定として開発者モードを有効にする必要があります。Claude for Desktopを起動し、画面左上にある三本線のメニューをクリックします。
表示されたメニューから「Help」を選び、その中にある「Enable Developer Mode」をクリックしてください。この設定により、後ほど行うMCP連携に必要な機能が利用できるようになります。
なお、Claude for Desktopを使用するにはAnthropicのアカウントが必要です。まだアカウントをお持ちでない方は、Claude for Desktop起動時に表示される画面からアカウントを作成してください。
Docker Desktopのインストール
Docker Desktopをインストールするには、まず公式サイトにアクセスしましょう。ページ中ほどに「download Docker Desktop」というボタンがあるかと思いますので、OSに合わせて適切なインストーラーをダウンロードしてください。インストーラーをダウンロードしたら、ダブルクリックして起動します。
インストール時の設定はほとんどデフォルトのままで問題ありません。インストールが完了したら、PCの再起動を求められる場合がありますので、その場合は指示に従って再起動してください。
再起動後、Docker Desktopを起動すると、チュートリアルが表示されます。今回の作業ではチュートリアルは必須ではありませんので、スキップしても構いません。
なお、インストール後にDocker Desktopを起動すると、Windows/Macのタスクバーやメニューバーにクジラのアイコンが表示されます。このアイコンが表示されていれば、正常にインストールが完了している証です。
これで、Docker Desktopのインストールは完了です。この後のMCPサーバーの構築に向けて、準備が整いました。
PostgreSQLのインストールと設定
PostgreSQLをインストールする前に、まずは公式サイトにアクセスしましょう。お使いのPC環境に合わせたインストーラーを選択してダウンロードします。
インストール時に注目したいのが、postgresへのアクセスに必要なパスワード設定です。このパスワードは後の作業で使用しますので、必ずメモを取っておきましょう。
インストールが完了したら、付属のGUIツール「pgAdmin4」を使ってデータベースの作成を行います。pgAdmin4は、インストールしたフォルダ内にある実行ファイルをダブルクリックすることで起動できます。
pgAdmin4を使ってデータベースを作成する手順は以下の通りです:
- 1. 画面左側のブラウザペインで「Databases」を右クリック
- 2. 表示されたメニューから「Create」→「Database」を選択
- 3. データベース名として「mydb」と入力(この名前は任意のもので構いませんが、今回はこの名前で進めます)
- 4. Owner(所有者)は「postgres」がデフォルトで選択されているはずですので、そのまま使用
- 5. 「Save」ボタンをクリックして保存
データベースが作成できたら、次はクエリツールを使ってSQLを実行します。「mydb」を右クリックして「Query Tool」を選択すると、SQLを入力・実行できるウィンドウが開きます。ここで必要なSQLクエリを入力し、画面上部にある再生ボタン(▶️)をクリックすることで、クエリを実行することができます。クエリは下記を参考に、適宜アレンジしてください。
-- ユーザー情報テーブル
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 商品情報テーブル
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price NUMERIC(10, 2) NOT NULL,
stock INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 購入記録テーブル
CREATE TABLE purchase_records (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id),
product_id INT REFERENCES products(id),
quantity INT NOT NULL,
purchase_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- サンプルデータ挿入
-- ユーザー
INSERT INTO users (name, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');
-- 商品
INSERT INTO products (name, price, stock) VALUES
('Laptop', 1200.50, 10),
('Headphones', 150.00, 50),
('Keyboard', 80.99, 30),
('Mouse', 40.25, 100);
-- 購入記録
INSERT INTO purchase_records (user_id, product_id, quantity) VALUES
(1, 1, 1), -- Alice buys 1 Laptop
(2, 2, 2), -- Bob buys 2 Headphones
(3, 3, 3), -- Charlie buys 3 Keyboards
(1, 4, 5); -- Alice buys 5 Mice
pgAdmin4を使えば、比較的簡単にデータベース環境を整えることができますね。
リポジトリのクローンとDockerイメージのビルド
Dockerを使用してPostgreSQL用のMCP-Serverを構築していきましょう。まずは、GitHubからmcp-serversリポジトリをクローンする必要があります。こちらからクローンできます。PostgreSQLのディレクトリだけが必要な場合は、該当ディレクトリのみをダウンロードしても構いません。
次に、Claude for Desktopの設定ファイルを編集します。インストールディレクトリ内に「claude_desktop_config.json」というファイルを探してください。もし見つからない場合は、新規作成する必要があります。このファイルに以下のJSONを追加します:
{
"mcpServers":{
"postgres":{
"command":"docker",
"args":[
"run",
"--rm",
"-p",
"5432:5432",
"mcp/postgres"
]
}
}
}
設定ファイルの編集が完了したら、Dockerイメージをビルドします。ターミナルを開き、以下のコマンドを実行してください:
bash docker build -t mcp/postgres -f src/postgres/Dockerfile .
※「src/postgres/Dockerfile」の部分は、お手元の環境でのDockerfileの正確なパスに置き換えてください。
最後に、Claude for Desktopを再起動します。単に×ボタンをクリックしただけではバックグラウンドで常駐したままになってしまいますので、Windowsの場合はタスクトレイのアイコンを、Macの場合はDockを右クリックして完全に終了させてから再起動してください。
設定が正しく完了すると、Claudeのチャットウィンドウ下部にトンカチ(🔨)マークが表示されます。これは、MCPサーバーとの接続が確立され、データベースへのアクセスが可能になったことを示しています。
データを表示してみよう!
これまでの準備が整ったところで、実際にデータを表示してみましょう!
Claudeのチャットウィンドウを開くと、画面下部にトンカチ(🔨)マークが表示されているはずです。このアイコンの存在は、MCPが正しく設定されていることを示しています。
ここからは、自然言語によるデータベースの内容表示ができます。例えば「Aliceが購入した商品は?」と質問してみてください。すると、LLMが動的にSQLクエリを生成し、設定したPostgreSQLデータベースからデータを取得して表示してくれます。
初めてデータにアクセスする際は、セキュリティ上の確認ダイアログが表示されます。これは、AIがデータベースにアクセスすることの承認を求めるものです。内容を確認の上、「承認」をクリックしてください。
その他にも、「商品の在庫状況を教えて」「先月の売上データを表示して」といった質問も可能です。データベースの構造を意識することなく、自然な対話でデータを取得できるようになっているはずです。
なお、結果が表示されない場合は、以下の点を確認してみましょう:
- PostgreSQLサーバーが正常に起動しているか
- データベースの接続情報(ホスト名やパスワード)が正しいか
- テーブルにデータが正しく登録されているか
最後に
今回は、Model Context Protocol (MCP)を活用してPostgreSQLデータベースとClaudeを連携させる方法をご紹介しました。
今回の例では、LLMが動的にSQLクエリを生成するという挙動になっていましたが、実務でのアプリ開発を考えると、LLMに直接データベースを操作させることについては慎重に検討する必要がありそうですね。read-onlyであるとはいえ、セキュリティの観点や、意図しないデータの改変を防ぐという意味では、あらかじめ用意した関数をLLMに選択させて実行するFunction Callingのアプローチのほうが、より安全で制御しやすいような気がしますが、みなさまはどう思われますでしょうか?
MCPはまだ発展途上の技術であり、今後、業界の標準規格として浸透するのかどうかとても気になるところです。またセキュリティ面での強化や、よりきめ細かな制御が可能になれば、MCPを活用したデータベース連携の実用的なユースケースも増えていくかもしれません。
これからもMCPの発展を注目しつつ、実践的な活用方法を模索していきたいと思います。