MCP Servers について
MCP Serversは、複数のMCPサーバーをまとめたDockerイメージです。プロジェクトでGit、PostgreSQL、検索、セッション間のメモリを使いたい開発者向けで、インスペクターとDocker・Podman用スクリプトも含みます。
主な機能
- 01複数のMCPサーバーを含むDockerイメージ
- 02Gitリポジトリと履歴へのアクセス
- 03PostgreSQLデータベースへの接続
- 04インターネット検索とセッションメモリ
- 05インスペクターとSTDIOプロキシ
活用シーン
- 01プロジェクトディレクトリでGitツールを起動
- 02エージェントによるPostgreSQLデータの参照
- 03情報収集のためのインターネット検索
- 04セッション間でのJSONメモリの保存
MCP 対応
Git、PostgreSQL、インターネット検索、メモリ用のMCPサーバーに加え、インスペクターとSTDIOツール用プロキシを提供します。各サービスはCursorなどのMCPクライアントに設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP サーバー
このプロジェクトでは、さまざまなプロジェクトで役立つ可能性のある複数の MCP サーバーを含む Docker コンテナイメージを提供しています。このプロジェクトはまだ初期段階にあり、すべてのサーバーが十分にテストされているわけではないため、注意してご使用ください。🧯 現在、次の機能を提供しています……
公開イメージの使用
最も簡単な方法は、公開イメージをプルして実行することです。作業したいプロジェクトのディレクトリに移動し、次の Docker コマンドを実行します。
docker run -it --rm \
-p 6274:6274 -p 6277:6277 -p 9099:9099 -p 9098:9098 -p 9097:9097 -p 9096:9096 \
-v ./:/project -v ./.memory:/memory \
-e MEMORY_FILE_PATH=./.memory \
--add-host=host.docker.internal:host-gateway \
--env-file ./.env \
--name mcp-servers ghcr.io/cmiles74/docker-mcp-servers:latest
Cursor に公開する MCP サーバー用のポートと、MCP サーバー検査ツールが使用する 2 つのポートをマッピングします。プロジェクトをマウントし、LLM が「メモリー」(データを格納する JSON ファイル)を保存するパスを設定します。プロジェクトの .env ファイルからデータベースへの接続文字列を読み込み、MCP サーバーとともにコンテナを起動します。
このスクリプトと Podman 用のもう 1 つのスクリプトは、scripts ディレクトリにあります。
イメージのビルド
プロジェクトをチェックアウトして、イメージをローカルでビルドすることもできます。問題なく実行できるはずです。
./build.sh
これにより、ローカルリポジトリに docker-mcp-server:latest イメージが作成されます。
イメージの実行
イメージを起動するシェルスクリプト start-mcp-servers を用意しています。このスクリプトはどこからでも呼び出せます。PATH に追加すると最も簡単ですが、必須ではありません。
cd ~/path/to/your-project
~/source/repos/docker-mcp-servers/start-mcp-servers
このスクリプトは、現在のディレクトリをコンテナ内の /project ディレクトリにマッピングします。STDIO プロトコルを使用するツールから見ると、プロジェクトは /project ディレクトリにあります。
最後に、起動スクリプトはコンテナに「mcp-servers」という名前を付けます。これにより、実行中のコンテナ内でコマンドを呼び出して実行しやすくなります。実行中のコンテナでシェルを開くには、次のようにします。
docker exec -it mcp-servers bash
提供されるツール
MCP サーバーに加えて、ポート 6274 で実行されるインスペクターツールも提供しています。このツールを使って、MCP サーバーが提供するツールを確認できます。コンテナの起動後、次の場所でインスペクターを利用できます。
また、標準入出力を使用するツールをラップするプロキシも提供しています。これにより、Cursor などのツールから簡単に利用できます。
Cursor の設定
Cursor アプリケーションメニューの「Settings」サブメニューから「Cursor Settings」を選択すると、すべての Cursor 設定が表示されます。左側のナビゲーションメニューから「MCP」を選択すると、設定済みの MCP サーバーがメインパネルに一覧表示されます。右上にある「+ Add new global MCP Server」ボタンをクリックすると、MCP 設定ファイルが開きます。これは大きな JSON データです。
以下の設定に置き換えるか、既存の設定に以下のサーバーを追加してください。ファイルを保存すると、ツールが Cursor の設定の「MCP」セクションで利用可能になります。その後、その設定ページに移動して、各ツールを有効にしてください。
{
"mcpServers": {
"git": {
"type": "sse",
"url": "http://localhost:9099/sse"
},
"postgres": {
"type": "sse",
"url": "http://localhost:9098/sse"
},
"ddg-search": {
"type": "sse",
"url": "http://localhost:9097/sse"
},
"knowledge-graph": {
"type": "sse",
"url": "http://localhost:9096/sse"
}
}
}
各リクエストとともに LLM に渡される「ルール」も設定できます。これらのルールを使って LLM の動作を誘導できます。たとえば、この MCP ツールに関する情報を追加すれば、すべてのプロンプトに含める必要がなくなります。すぐに使えるサンプルのルールセットを用意しました。
ツールに関する注意事項
ツールを使用する際に留意すべき点を以下に示します。😉
Git
Git MCP サーバーは、コンテナの起動元ディレクトリ(start-mcp-servers の実行時の作業ディレクトリ)がプロジェクトディレクトリになるように設定されています。このディレクトリはコンテナ内の /project にマッピングされますが、LLM がこれを自分で把握できないことがあります。Cursor に読み込まれているプロジェクトが、Git ツールでは「/project」であることを伝えるプロンプトから始める必要があるようです。たとえば、次のようにします。
「git」という名前の MCP サーバーが設定されており、このプロジェクトの操作に使用できます。このサーバーは、このプロジェクトへのパスが「/project」になるように設定されています。
これは問題なく機能しますが、もっとよい方法があるのではないかと思っています。プロジェクトをよりスムーズにマッピングする方法を思いついたら、PR を送ってください!
PostgreSQL
プロジェクトディレクトリで start-mcp-servers を実行すると、そのディレクトリのルートにある .env ファイルが読み込まれます。PostgreSQL MCP サーバーは、MCP_DATABASE_URI という環境変数に設定された接続文字列を参照し、それを使ってデータベースに接続します。ツールは Docker コンテナ内で実行されるため、データベースのホスト名にはローカルマシンを指す「host.docker.internal」を指定する必要があります。
MCP_DATABASE_URI=postgresql://DB_ACCOUNT:[email protected]:5432/DB_NAME
env-sample フォルダーにサンプルがあります。プロジェクトに .env ファイルがない場合は作成するか、この新しい変数をファイルの末尾に追加してください。その後、MCP サーバーを起動すると、接続文字列が読み込まれてデータベースに接続します。
データベースを操作するツールが利用可能であることを、LLM に伝える必要があるかもしれません。以下の抜粋のようなプロンプトから始めるとうまくいくことがわかりました。
このプロジェクトにはテーブルがたくさんあります。「postgres」MCP ツールを使って確認できます。ほとんどのテーブルは「super_interesting」スキーマにあります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。