Claude Desktop に Docker を使って MCP Server を構築する方法 ~②SearXNG編~


以下は、[SearXNG MCP Server](https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem) を Windows に [Docker Desktop](https://www.docker.com/ja-jp/products/docker-desktop/) を使って構築する手順をまとめたものです。

**Braive Search** を用いて、Web検索機能を持たせる方法が流行っていますが、SearXNG はAPIを必要とせず無制限で利用できるメリットがあります。

OpenWebUI にWeb検索機能を与えるためにも使われています。

https://docs.openwebui.com/tutorials/web-search/searxng/

### 1. 事前準備
#### 1.1 ソフトウェアのインストールとClaude の開発者モードを有効化

未実施の場合は以下を参照してください。

[Claude Desktop に Docker を使って MCP Server を構築する方法 ~①Systemfile編~](https://qiita.com/hmkc1220/items/90c5d3901ed82c304cc0#1-%E4%BA%8B%E5%89%8D%E6%BA%96%E5%82%99)

#### 1.2 SearXNG コンテナの立ち上げ

作業ディレクトリに、`docker-compose.yml`を配置します。
※ 私は以下に配置しました。
`C:/Users/username/mcp_projects/searxng/docker-compose.yml`

```yml:docker-compose.yml
services:
  searxng:
    image: searxng/searxng:latest
    ports:
      - "8080:8080"
    volumes:
      - ./searxng:/etc/searxng
    environment:
      SEARXNG_HOSTNAME: "localhost:8080/"
    restart: unless-stopped
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - DAC_OVERRIDE
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"
```

`docker compose up -d`を実行し、コンテナを立ち上げます。
コンテナが完全に立ち上がったら、`docker compose down`で一旦落とします。
`docker-compse.yml`と同じ階層に、searxng ディレクトリが新たに生成されているので、中に入って`settings.yml`を編集し、`- json`を追記します。

```diff_yaml:settings.yml
  # remove format to deny access, use lower case.
  # formats: [html, csv, json, rss]
  formats:
    - html
+    - json
```

その後、もう一度`docker compose up -d`を実行し、コンテナを立ち上げます。

`powershell`で以下コマンドを実行すると、SearXNG Server が正常に動作しているかチェックできます。
```bash
curl "http://localhost:8080/search?q=SearXNG&format=json"
```

### 2. SearXNG MCP server のソースコードの取得

SearXNG MCP server のソースコードを取得します。

```bash
git clone https://github.com/ihor-sokoliuk/mcp-searxng
cd mcp-searxng
```

※私は以下のディレクトリで実行しました。
`C:/Users/username/mcp_projects`

### 3. SearXNG MCP server の Docker イメージのビルド

先ほど取得した SearXNG MCP server のソースをビルドし、Docker イメージを作成します。

```bash
docker build -t mcp-server-searxng:latest -f Dockerfile .
```

### 4. Claude Desktop用設定ファイルの編集

Claude Desktop が SearXNG MCP Serer をハンドリングできるように設定ファイルを変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631481/0597579b-ffd6-4c63-a0d5-2cf00ea56923.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631481/db5045ab-fc2b-44cd-a09b-f4d8355faa5c.png)

Claude Desktopの設定ファイル（例: `claude_desktop_config.json`）に以下を追記します。

```diff_json:
{
  "mcpServers": {
    "filesystem": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--mount", "type=bind,src=<YOUR_LOCAL_PATH>,dst=/projects/<MOUNT_POINT>",
        "mcp/filesystem",
        "/projects"
      ]
+    },
+    "searxng": {
+      "command": "docker",
+      "args": [
+        "run",
+        "-i",
+        "--rm",
+        "-e",
+        "SEARXNG_URL",
+        "mcp-server-searxng:latest"
+      ],
+      "env": {
+        "SEARXNG_URL": "http://host.docker.internal:8080"
      }
    }
  }
}
```
※ SEARXNG_URLは、コンテナtoコンテナなので、`localhost`でなく、`host.docker.internal`を使います。

### 5. 動作確認

Claude Desktopを再起動します。

※ ウィンドウを閉じるだけでなく、以下から完全に終了させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631481/12dd4c44-2b6c-4b92-b7e0-f8eca47edcb2.png)

Claude Desktop 再起動時に、Filesystem MCP Server のコンテナが自動で立ち上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631481/d4256d0f-d45e-47c6-ae25-1ec8e6f03cbb.png)

Claude に次のようなプロンプトを送って動作確認します：

```
SearXNGで大谷翔平について調べて、/projects/shared/ohtani.txt に まとめた内容を記載し出力して。
```

ツールを使用するか確認が入るので、許可して継続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631481/d4ad5981-2b16-40f6-bd54-4787a46a69fd.png)

ohtaniファイルが生成されれば成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631481/01e1ddbf-bf8c-4511-9d15-46f1e3a397d5.png)

### YouTubeTranscript編に続く...

[Claude Desktop に Docker を使って MCP Server を構築する方法 ~③YouTubeTranscript編~](https://qiita.com/hmkc1220/items/dcf6c21c3dc74b682270)