MCPパワーでClaudeにCosenseを書いてもらう

スマホからCosense書きにくい問題

私は普段メモ用にCosenseを使っているが、スマホからCosenseを書くのは結構難しい。 上手いことインデントがかけられなかったり、カーソルの移動が難しかったりと、結構普段使うにはむずいところがある。 そこで、yosider/cosense-mcp-server: An MCP Server for Cosenseをインターネット越しに使えるようにすることで、スマホのClaudeからCosenseを読み書きできるようにする。

MCPサーバーの建立

CosenseにアクセスするためのMCPサーバーとして、yosider/cosense-mcp-serverを使う。

github.com

このMCPサーバーはローカル動作を前提としていて、stdioで通信するため、インターネット越しに使えるようにするためにはstdioをHTTPに載せるいい感じのプロキシを使うことになる。 この手のニーズは既にあるようで、今回はその中でもメジャーなsparfenyuk/mcp-proxyを使うことにする。

github.com

mcp-proxyの導入

Node.js、pnpm、Cloudflare Tunnelの導入が別途必要

$ pnpm install -g mcp-proxy

あとは、

$ COSENSE_PROJECT_NAME=your_project_name \
   COSENSE_SID=your_sid \
   mcp-proxy --port 8080 -- pnpm -s dlx @yosider/cosense-mcp-server

で動作する。

your_project_nameは操作対象のプロジェクト名(例えばhttps://scrapbox.io/taiseiue なら"taiseiue")、your_sidはCosenseのセッションIDで置換する。 セッションIDはChromeでCosenseを開いて、以下の画像のように開発者ツールから値を取得する。

sidの取得

systemdで管理する

毎回コマンドを叩くのは面倒なので、サービスにしてsystemdで管理するようにする。

/etc/systemd/system/cosense-mcp.serviceに以下のように書く。your_usernameとyour_project_name、your_sidは各自置換されたい。

[Unit]
Description=Cosense MCP Server (mcp-proxy)
After=network.target

[Service]
Type=simple
User=your_username
WorkingDirectory=/home/your_username

Environment=COSENSE_PROJECT_NAME=your_project_name
Environment=COSENSE_SID=your_sid

ExecStart=mcp-proxy --port 8080 -- pnpm -s dlx @yosider/cosense-mcp-server

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

後はインストールする

$ sudo systemctl daemon-reload
# 起動する
$ sudo systemctl start cosense-mcp

# ログを眺める
$ sudo journalctl -u cosense-mcp -f
Feb 25 13:23:26 lily systemd[1]: cosense-mcp.service: Scheduled restart job, restart counter is at 25.
Feb 25 13:23:26 lily systemd[1]: Started cosense-mcp.service - Cosense MCP Server (mcp-proxy).
Feb 25 13:23:26 lily systemd[1]: cosense-mcp.service: Main process exited, code=exited, status=203/EXEC
Feb 25 13:23:26 lily systemd[1]: cosense-mcp.service: Failed with result 'exit-code'.

パスが通っていなさそうなので、/etc/systemd/system/cosense-mcp.serviceにPATHを追加する。

[Service]
+ Environment=PATH=/usr/local/bin:/usr/bin:/bin:/home/your_username/.local/share/pnpm:/home/your_username/.local/share/mcp-proxy

その後、

$ sudo systemctl daemon-reload
$ sudo systemctl start cosense-mcp

$ sudo journalctl -u cosense-mcp -f

これで動作したので最後に以下のようにOS起動時に自動起動させる。

$ sudo systemctl enable cosense-mcp

Cloudflare Tunnelで公開する

動かしたMCPサーバーをCloudflare Tunnelで公開する。タダ乗りされると嫌なのでCloudflare Accessで認証も行う。

Cloudflare Tunnelでの公開は各自されたい。Cloudflare ZeroTrust>ネットワーク>トンネルから行える。

Cluodflare Accessで認証を設定する。まずはサービス資格情報を作成する。ここで生成された認証情報がOAuthトークンとシークレットになる。

サービス資格情報を作成する

次にポリシーから、先ほど作成した認証情報で認証を行うポリシーを作成する。

ポリシーの作成

最後にAccessアプリケーションを、セルフホスト用テンプレートで作成する。

アプリケーションの作成

これでMCPサーバーの構築は完了。

ClaudeにMCPサーバーを接続する

ClaudeのカスタマイズからMCPサーバーを接続する。

MCPサーバーの追加

上手く接続できるとこのようになる。

接続後の様子

試してみる

Cosenseの中身をリストさせている

Skillsの設定

Cosense記法はMarkdownと違うが、なかなかAIはMarkdown記法を使いたがるので、記法をSkillsに入れるようにした。 以下のページをExport for AIしてそれを読ませることでCosense記法をマスターしてもらう。

scrapbox.io

最終的にはこういうSkillsになった。

cosence-notation-skill.md · GitHub

自分で触った箇所としては、以下のようにClaudeが作成したこと、人間が見ていないことを識別できるようにタグを作成させるようにした。

##必須タグ
Claudeがコンテンツを作成・編集する際は、**必ずページの末尾に以下のタグを追加すること**:

#author:claude #waiting-review

- このタグはClaudeが作成・編集したことを示し、レビュー待ちを意味する
- ページの2行目に単独で記述する
- 省略不可

試してみる

例えば外出先でCosenseに面白いジョーク集を作りたくなった時に以下のようにやってもらえる。

iPhoneのClaudeアプリで書いてもらっている様子

より実践的な例だと、今日の日記を書いておいてもらえる。

日記もとい日報を書いてもらっている様子

どちらもそこそこちゃんと書けている。日報については、書きかたも空気を読んでいてくれていい感じ。

感想

そこそこ便利だと思ったけど、自分のメモ帳に知らない人が追記しているみたいな感覚でやや不気味だと思った。 ページだけ作っておいて、「あれ結局どういうことやったん」とか聞く分には便利かも。