概要 #
- メモなどを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
流れ #
- Notionにインテグレーションを作成
- インテグレーションで内部インテグレーションシークレットを発行
- WSL2 上に .env ファイルを作成
- Cursor Desktop にMCPサーバーの設定を追加
- Notionの対象ページに接続設定(アクセス許可)を追加
- Cursor Desktop から試してみる
- トラブルシューティング・小ネタ
書くこと #
- Window環境上のCursor DesktopからWSL上のMCPコンテナをDockerから呼び出す
- Notion MCP ServerとNotionを連携する設定
書かないこと #
- WSLインストール
- Cursor Desktop インストール
- wslへのDockerインストール
- MCPとは?cursorとは?などはもっと詳しく書いている方がいるので書きません。
公式手順 #
これはNotion公式が作成したMCP Serverです。
手順詳細 #
Notionにインテグレーションを作成 #
-
Notionのインテグレーションページにアクセスします
-
新しいインテグレーション をクリックします
-
以下を適宜入力して、保存をクリックします。
- インテグレーション名:なにか適当な名前
- 関連ワークスペース: 自分のワークスペースを選択
- 種類:内部 ※このままでOK
インテグレーションで内部インテグレーションシークレットを発行 #
-
内部インテグレーションシークレットの表示をクリックしてトークンの値を確認します ※ 後で行うcursor設定で使用します
-
機能 の箇所を適宜選択します。 あとで変更できますので、ここではデフォルトのままで問題ありません。 変更した場合は、保存をクリックします
WSL2 上に .env ファイルを作成 #
-
WSL上に設定ファイルを格納するディレクトリを作成します。
mkdir ~/notion-mcp cd ~/notion-mcp -
ディレクトリを移動して環境変数ファイルを作成します。
- ntn_xxxは、Notionで発行した内部インテグレーションシークレットに置き換えます
cat <<EOF > notion.env
OPENAPI_MCP_HEADERS={"Authorization":"Bearer ntn_xxx...","Notion-Version":"2022-06-28"}
EOF
Cursor Desktop にMCPサーバーの設定を追加 #
-
Cursor Desktop を起動します。
-
メニューの ファイル>ユーザ設定>Cursor Settings を選択します
-
MCP tools > add Custom MCPを選択します
-
タブ表示されたmcp.json に以下内容を貼り付けます。
-
設定コード
{ "mcpServers": { "notionApi_wsl": { "command": "wsl", "args": [ "docker", "run", "--rm", "-i", "--env-file", "/home/<WSLユーザー名>/notion-mcp/notion.env", "mcp/notion" ] } } }
-
-
/home/<WSLユーザー名>/notion-mcp/notion.envの箇所を自分のユーザ名に変更します。
-
Cursor Desktop を一旦閉じて再起動します
-
MCP toolsで作成したMCPサーバのステータスがグリーンであれば成功です。
Notionの対象ページに接続設定(アクセス許可)を追加 #
-
Notionで新規にページを作成します
-
作成ページの画面右上の三点リーダをクリック
-
接続 > 作成したインテグレーションを選択
-
権限確認の画面が表示されたら、はいを選択します
Cursor Desktop から試してみる #
-
cursorのチャットでNotionのページを指定してメッセージの追記を指示します
-
Run tool が表示されたらクリックします ※複数回表示される場合があります
-
Notionのページに移動して、確認します。チャットの内容が追記されていれば成功です
トラブルシューティング・小ネタ #
- チャットメッセージ上も完了したと言っているが、Notion側に更新がないことがありました。
- そんな時は以下のように設定を確認してください。
- WSLで以下コマンドを実行して、以下を確認します
- コンテナの変数
- コンテナのログ
- ⇛設定がない、ログが無い場合、環境変数の設定箇所を見直してください。
- 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}~~
-
公式手順を参考にした際の失敗例は以下です
-
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\"}" } } } } -
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" ] } } }
-