メインコンテンツへスキップ
  1. Blogs/

WindowのCursorDesktopでWSL上のDockerからMCPコンテナを実行する方法について

2 分
AI
0222-nnn
著者
0222-nnn
猫が好き
目次

概要
#

  • メモなどをNotionメインで使っているので、cursorと連携して便利に使いたいと思い Notion MCP Server の設定をやってみました。
  • 調べるとほとんどがNode.jsを使用したnotion-mcp-serverの利用ですが、 なるべく環境を汚したくないので、コンテナで実行する方法を試してみました。

結論
#

  • 公式の手順通りではうまくいきませんでしたが、本記事の手順により、Windows上のCursor DesktopからWSL上のMCPコンテナを実行し、Notionと連携させることに成功しました!

環境
#

  • Windows Ver:11(WSL有効)
  • WSL Ver 2.5.7.0
  • Cursor Desktop Ver:1.0.0
  • Notion Ver:2.51

流れ
#

  1. Notionにインテグレーションを作成
  2. インテグレーションで内部インテグレーションシークレットを発行
  3. WSL2 上に .env ファイルを作成
  4. Cursor Desktop にMCPサーバーの設定を追加
  5. Notionの対象ページに接続設定(アクセス許可)を追加
  6. Cursor Desktop から試してみる
  7. トラブルシューティング・小ネタ

書くこと
#

  • Window環境上のCursor DesktopからWSL上のMCPコンテナをDockerから呼び出す
  • Notion MCP ServerとNotionを連携する設定

書かないこと
#

  • WSLインストール
  • Cursor Desktop インストール
  • wslへのDockerインストール
  • MCPとは?cursorとは?などはもっと詳しく書いている方がいるので書きません。

公式手順
#

これはNotion公式が作成したMCP Serverです。

手順詳細
#

Notionにインテグレーションを作成
#

  1. Notionのインテグレーションページにアクセスします

  2. 新しいインテグレーション をクリックします

    Notionの新しいインテグレーション作成画面

  3. 以下を適宜入力して、保存をクリックします。

    • インテグレーション名:なにか適当な名前
    • 関連ワークスペース: 自分のワークスペースを選択
    • 種類:内部 ※このままでOK

    インテグレーション名などの入力画面

インテグレーションで内部インテグレーションシークレットを発行
#

  1. 内部インテグレーションシークレットの表示をクリックしてトークンの値を確認します ※ 後で行うcursor設定で使用します

  2. 機能 の箇所を適宜選択します。 あとで変更できますので、ここではデフォルトのままで問題ありません。 変更した場合は、保存をクリックします

    内部インテグレーションシークレットの表示

WSL2 上に .env ファイルを作成
#

  1. WSL上に設定ファイルを格納するディレクトリを作成します。

    mkdir ~/notion-mcp
    cd ~/notion-mcp
    
  2. ディレクトリを移動して環境変数ファイルを作成します。

    • ntn_xxxは、Notionで発行した内部インテグレーションシークレットに置き換えます
cat <<EOF > notion.env
OPENAPI_MCP_HEADERS={"Authorization":"Bearer ntn_xxx...","Notion-Version":"2022-06-28"}
EOF

Cursor Desktop にMCPサーバーの設定を追加
#

  1. Cursor Desktop を起動します。

  2. メニューの ファイル>ユーザ設定>Cursor Settings を選択します

    Cursor Settingsメニュー

  3. MCP tools > add Custom MCPを選択します

  4. タブ表示されたmcp.json に以下内容を貼り付けます。

    mcp.jsonの設定画面

    • 設定コード

      {
        "mcpServers": {
          "notionApi_wsl": {
            "command": "wsl",
            "args": [
              "docker",
              "run",
              "--rm",
              "-i",
              "--env-file",
              "/home/<WSLユーザー名>/notion-mcp/notion.env",
              "mcp/notion"
            ]
          }
        }
      }
      
  5. /home/<WSLユーザー名>/notion-mcp/notion.envの箇所を自分のユーザ名に変更します。

  6. Cursor Desktop を一旦閉じて再起動します

  7. MCP toolsで作成したMCPサーバのステータスがグリーンであれば成功です。

ローカルの画像

Notionの対象ページに接続設定(アクセス許可)を追加
#

  1. Notionで新規にページを作成します

  2. 作成ページの画面右上の三点リーダをクリック

  3. 接続 > 作成したインテグレーションを選択

    Notionの接続設定画面

  4. 権限確認の画面が表示されたら、はいを選択します

    権限確認画面

Cursor Desktop から試してみる
#

  1. cursorのチャットでNotionのページを指定してメッセージの追記を指示します

  2. Run tool が表示されたらクリックします ※複数回表示される場合があります

    Run toolの表示

  3. Notionのページに移動して、確認します。チャットの内容が追記されていれば成功です

    Notionページへの追記結果

トラブルシューティング・小ネタ
#

  • チャットメッセージ上も完了したと言っているが、Notion側に更新がないことがありました。
  • そんな時は以下のように設定を確認してください。
    • WSLで以下コマンドを実行して、以下を確認します
      • コンテナの変数
      • コンテナのログ
        • ⇛設定がない、ログが無い場合、環境変数の設定箇所を見直してください。
docker ps
docker exec -it <CONTAINER ID> env
docker logs <CONTAINER ID>
    • 以下結果では、**OPENAPI_MCP_HEADERS=**に値があるので成功しています。
tech-0222@MSI:notion-mcp$ docker ps
CONTAINER ID   IMAGE        COMMAND               CREATED             STATUS             PORTS     NAMES
a3c7cd3a36a7   mcp/notion   "notion-mcp-server"   About an hour ago   Up About an hour             awesome_mccarthy
tech-0222@MSI:notion-mcp$

tech-0222@MSI:notion-mcp$ docker exec -it a3c7cd3a36a7 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=a3c7cd3a36a7
TERM=xterm
OPENAPI_MCP_HEADERS={"Authorization":"Bearer ntn_XXXXXX","Notion-Version":"2022-06-28"}
NODE_VERSION=20.19.2
YARN_VERSION=1.22.22
HOME=/root
tech-0222@MSI:notion-mcp$

tech-0222@MSI:notion-mcp$ docker logs a3c7cd3a36a7
{"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"serverInfo":{"name":"Notion API","version":"1.0.0"}},"jsonrpc":"2.0","id":0}~~
  • 公式手順を参考にした際の失敗例は以下です

    1. wsl経由でdocker runを実行する構成のため、mcp.jsonのenvで指定した環境変数がDockerコンテナに渡りません。

      {
        "mcpServers": {
          "notionApi_wsl": {
            "command": "wsl",
            "args": [
              "docker",
              "run",
              "--rm",
              "-i",
              "-e", "OPENAPI_MCP_HEADERS",
              "mcp/notion"
            ],
            "env": {
              "OPENAPI_MCP_HEADERS": "{\"Authorization\":\"Bearer ntn_XXXX\",\"Notion-Version\":\"2022-06-28\"}"
            }
          }
        }
      }
      
    2. argsに-eで直接渡す方法も同様に失敗します。イメージを再ビルドする手間を避けるため、今回はenv-file方式を採用しました。

      {
        "mcpServers": {
          "notionApi_wsl": {
            "command": "wsl",
            "args": [
              "docker",
              "run",
              "--rm",
              "-i",
              "-e",
              "OPENAPI_MCP_HEADERS={\"Authorization\":\"Bearer ntn_XXXX\",\"Notion-Version\":\"2022-06-28\"}",
              "mcp/notion"
            ]
          }
        }
      }