🔔

CursorとWindsurfで使える通知音MCPを作ってみた

に公開

こんにちは、しば田です。

Clineで実装終了時に聞こえるBeep音、
CursorとWindsurfで欲しいなと思ったことありませんか?

「コード生成が終わったかどうか」や「ユーザーの承認が必要なとき」に気づかず、別のタブで作業していたり、スマホいじってたりして時間を無駄にすることが課題だったので作成しました。

今回のMCP制作にかかった時間は約30分くらいでした。

こんな感じになります。

もちろん音もちゃんと鳴ってます。

レポジトリ

https://github.com/ks0318-p/sound-notification-mcp

↑レポジトリこちらです。セットアップ方法もREADMEに記載しています。
セットアップにヘルプが欲しい方はXでDMいただければ手助けします。

MCPとは?

ずっとふわっとした理解だったのだが、最近MCPに1mm入門しました。
https://zenn.dev/ks0318/articles/053b5bc1701c31

注意事項(免責)

  • 現状、macOSにのみ対応している
  • MCPの呼び出しはLLMの判断に依存するため、予期しないタイミングで音が鳴ることや、期待通りに動作しないことがある
  • Windsurfでは、終了時に通知音無限ループに陥ることがある(クレジット消費にご注意ください)
  • Cursor/Windsurf共通でコマンド実行前の承認は鳴らないこともある

きっかけ

同じようなことを実現しているリポジトリを発見。
野良MCPをローカルに持ってくるのは抵抗があるので、練習がてら自分も自作することにした。
https://github.com/ericlistin/sound-mcp

作り方

Windsurfを使用して作りました。

プロンプト(和訳)

Cursorエージェントがコーディングを終了するたびに音を鳴らすMCP(Model Context Protocol)を作成したいと思います。エージェントの作業を監視する必要はありません。エージェントは自分で作業終了時にこのMCPを呼ぶだけです。その部分はrulesで制御します。以下のSDKを使用してください。

https://github.com/modelcontextprotocol/typescript-sdk

このSDKのURLを必ず渡すこと。
https://github.com/modelcontextprotocol/typescript-sdk

これで一撃で80%くらいは出来上がったので、そこからは手で微調整しました。

このMCPサーバがやっていること

https://github.com/ks0318-p/sound-notification-mcp/blob/main/src/index.ts

play-soundというライブラリでmacのシステム内のサウンドファイルを呼ぶ

本当にこれだけ。

CursorとWindsurfが実装完了したかを監視しているの?

していません。実装終了したかの判断はエージェント側の責務にします。

じゃあどうやるの?

rulesファイルで指示します。
Windsurfはruleだけでは心許ないのでmemoryにもいれます。

こちらはWindsurfでglobalに適用する場合。

Always Notify by sound using "sound-notification-mcp" every time you need user attention
 - when you need user's approval for running the tool
 - when you finish the task
 - DO NOT MAKE MORE THAN ONE SOUND NOTIFICATION.

セットアップ例

Cursorでの設定はこんな感じ。
Windsurfも全く一緒で問題ありません。基本Globalのファイルに入れるでいいと思います。

{
    "mcpServers": {
      "sound-notification-mcp": {
        "command": "node",
        "args": ["/Users/[username]/sound-notification-mcp/dist/index.js"]
      }
    }
  }

おまけ

お茶目なWindsurf

Xやってます。

発信してます、フォローお願いします・・・!!!!!
https://x.com/KeisukeShibata_

Discussion