🔥Cursorにweb検索機能実装しよう🔥DuckDuckGo検索MCPサーバーを作ろう🔥

# はじめに
Cursor の AI に、自分で作ったツールを追加できたら便利だと思いませんか？ 🤔 Model Context Protocol (MCP) を使えば、それが可能になります！
今回は、Web 検索でおなじみの DuckDuckGo を使って検索やコンテンツ取得ができる MCP サーバーを構築し、Cursor に統合する手順を紹介します。
repomixで一つのテキストにまとめてAIにやらせましょう5分くらいでできます。
こんな感じの👇️
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012869/3ee06645-3742-4e1a-b558-c00520576a8e.png)
# MCPサーバーとは？ 🔌
Model Context Protocol (MCP) は、AI モデル（Cursor のエージェントなど）が外部のツールやサービスと連携するための仕組みです。MCP サーバーを立てることで、Cursor のチャットから `@あなたのサーバー名` のように呼び出して、特定の機能（今回の場合は DuckDuckGo 検索）を実行できるようになります。

これを使えば、Cursor をもっとパワフルにカスタマイズできますね！💪

今日は **Python** と **FastMCP** ライブラリを使って、DuckDuckGo 検索サーバーを作ります🦆

## 🚀 アジェンダ

1.  プロジェクトの準備
2.  依存関係のインストール
3.  MCP サーバーの起動
4.  Cursor への設定
5.  使ってみよう！

## 🛠️ 手順
まずは MCP サーバーを実行できる環境を用意します。

### 1. プロジェクトの準備 📂
今回は、[duckduckgo-mcp-server](https://github.com/nickclyde/duckduckgo-mcp-server) という既存のプロジェクトを利用します。

*   **リポジトリのクローン (推奨):**
    ```bash
    git clone https://github.com/nickclyde/duckduckgo-mcp-server.git
    cd duckduckgo-mcp-server
    ```
*   **または、ファイルから復元:**
    もし `repomix-output.txt` のような統合ファイルがある場合は、そこから必要なファイルを展開してください。（今回はこの方法で進めましたね！）

    必要なファイルは主に以下の通りです:
    *   `.gitignore`
    *   `pyproject.toml` (プロジェクト定義と依存関係)
    *   `src/duckduckgo_mcp_server/__init__.py`
    *   `src/duckduckgo_mcp_server/server.py` (サーバーのコアロジック)
    *   `README.md` (参考情報)
    *   など...

### 2. 依存関係のインストール 📦
プロジェクトに必要なライブラリをインストールします。`pyproject.toml` に必要なものが定義されています。

*   **Python の準備:**
    Python がインストールされていることを確認してください。
    ```bash
    python --version
    # または py --version
    ```

*   **pip を使ってインストール:**
    プロジェクトのルートディレクトリ（`pyproject.toml` がある場所）で以下のコマンドを実行します。
    ```bash
    pip install .
    ```
    (もし `uv` が使える環境なら `uv pip install .` でも OK です)

    たくさんのライブラリがインストールされるはずです。エラーが出なければ成功です🎉

    :::note warn
    プロキシ環境下などでエラーが出る場合は、プロキシ設定を追加する必要があるかもしれません。
    ```bash
    pip install . --proxy="http://your-proxy-server:port"
    ```
    :::

### 3. MCP サーバーの起動 🚀
いよいよサーバーを起動します！開発中は `mcp dev` コマンドを使うのが便利です。

*   **サーバー起動コマンド:**
    プロジェクトのルートディレクトリで実行します。
    ```bash
    mcp dev src/duckduckgo_mcp_server/server.py
    ```
    このコマンドはサーバーをフォアグラウンドで起動し、ログなどを表示します。

*   **バックグラウンドでの起動 (オプション):**
    もしターミナルを他の作業で使いたい場合は、`&` をつける（Linux/macOS）か、Windows Terminal の機能などでバックグラウンド実行します。Cursor の機能で実行した際は、`is_background=True` オプションを使いましたね！

*   **起動確認 (任意):**
    別のターミナルを開いて `mcp list` コマンドを実行すると、起動中の MCP サーバー (`ddg-search`) がリストに表示されるはずです。

### 4. Cursor への設定 ⚙️
起動した MCP サーバーを Cursor に認識させます。

*   **Cursor の設定を開く:**
    Cursor の設定画面 ( `Ctrl+,` または `Cmd+,` ) を開き、「MCP」セクションに移動します。

*   **グローバル MCP サーバーの追加:**
    「+ Add new global MCP server」ボタン（または類似のボタン）があるはずです。これをクリックすると、設定ファイル `mcp.json` が開くか、設定用の UI が表示されます。

*   **`mcp.json` を直接編集する場合:**
    `C:\Users\<あなたのユーザー名>\.cursor\mcp.json` (Windowsの場合) または `~/.cursor/mcp.json` (macOS/Linuxの場合) を開き、以下のように編集します。既に `mcpServers` がある場合は、その中に `ddg-search` の設定を追加します。

    ```json:C:\Users\jacka\.cursor\mcp.json
    {
      "mcpServers": {
        "ddg-search": {
          "command": "python",
          "args": ["-m", "duckduckgo_mcp_server.server"],
          "cwd": "C:/Users/duckduckgo-mcp-server-main"
        }
        // 他のサーバー設定があればここに追加
      }
    }
    ```
    *   `command`: サーバー起動に使うコマンド (`python`)。
    *   `args`: コマンドに渡す引数。
    *   `cwd`: **重要！** プロジェクトのルートディレクトリの **フルパス** を指定します。Windows でもパス区切り文字は `/` を使うのが安全です。あなたの環境に合わせてパスを修正してください。

*   **UI で設定する場合:**
    UI の指示に従い、サーバー名 (`ddg-search`)、コマンド (`python`)、引数 (`-m`, `duckduckgo_mcp_server.server` を個別に入力)、作業ディレクトリ 
    (`C:/Users/duckduckgo-mcp-server-main`) を設定します。

*   **Cursor の再起動 (推奨):**
    設定を確実に反映させるために、Cursor を再起動するのが良いでしょう。

### 5. 使ってみよう！ 🔎
設定がうまくいけば、Cursor のチャットで `@` を入力すると、候補に `@ddg-search` が表示されるはずです！

*   **検索してみる:**
    ```
    @ddg-search 今日の東京の天気
    ```
    と入力して送信すると、サーバーが DuckDuckGo で検索を実行し、結果を返してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012869/fdbd7dda-b925-4c8a-9e17-2634c25dbab9.png)

*   **コンテンツを取得してみる:**
    ```
    @ddg-search fetch_content url="https://qiita.com/"
    ```
    のように `fetch_content` ツールを使って、指定した URL の内容を取得することもできます。

# サーバーの機能紹介 🔧
今回構築した `ddg-search` サーバーには、主に2つのツールが実装されています。

1.  **`search(query: str, max_results: int = 10)`**
    *   DuckDuckGo で指定された `query` を検索します。
    *   `max_results` で取得する結果の最大数を指定できます（デフォルトは10件）。
    *   検索結果のタイトル、URL、スニペット（要約）を整形して返します。

2.  **`fetch_content(url: str)`**
    *   指定された `url` のウェブページを取得し、本文と思われるテキストを抽出・整形して返します。
    *   広告やナビゲーションなどの不要な部分はできるだけ除去されます。

**レート制限について:** ⚠️
このサーバーには、DuckDuckGo への短時間でのアクセス集中を防ぐための簡単なレート制限（検索: 30回/分、コンテンツ取得: 20回/分）が組み込まれています。連続で使いすぎると、少し待機する場合があります。

# さいごに
これで、あなただけの DuckDuckGo 検索ツールが Cursor に追加されました！🎉
MCP を活用すれば、今回のように外部 API と連携したり、特定の処理を行うカスタムツールをどんどん追加していくことができます。

ぜひ、色々な MCP サーバーを探したり、自分で作ったりして、Cursor をさらに便利にしてみてくださいね！

この記事が、あなたの Cursor ライフの一助となれば幸いです 😊。