SuperColliderを操作するMCPサーバーを作ってみた

## はじめに


SuperColliderは、プログラミングで音響合成が行える強力なシンセサイザーですが、使いこなすにはSuperColliderの文法の理解と音響合成の知識が必要です。  
そこで最近注目を集めているModel Context Protocol (MCP) を使って手軽に自然言語でスパコを操ることができるのでは？と考え、SuperColliderを操作するMCPサーバーを開発しました。


開発したMCPサーバーのリポジトリは以下のリンクからアクセスできるので、興味のある方はぜひのぞいてみてください。

[Githubリンク](https://github.com/Synohara/supercollider-mcp)
  

この記事ではインストールのやり方や使い方を解説していこうと思います。

## デモ

デモは同じ内容を載せた個人ブログにて公開しています。
https://makotyo-blog.vercel.app/posts/supercollider-mcp-server
 


## できること

2つのToolを提供しています。

**synth-execute**

1つのシンセサイザーを作成し、そのコードで音を出します。
引数はシンセサイザー名、シンセサイザーのコードを含むオブジェクトと再生時間です。

スキーマだけ抜粋すると以下のようになります。

```typescript
{
    synth: z.object({
      name: z.string().describe("シンセの名前"),
      code: z.string().describe("シンセのコード")
    }).describe("再生するシンセの情報"),
    duration: z.number().optional().describe("再生時間（ミリ秒）。デフォルトは5000（5秒）")
}
```

**multi-synth-execute**

複数のシンセサイザーを作成し、それらを同時に演奏します。
引数はシンセサイザーのオブジェクトのリストと再生時間です。

こちらのスキーマは以下のようになります。

```typescript
{
  synths: z.array(
    z.object({
      name: z.string().describe("シンセの名前"),
      code: z.string().describe("シンセのコード")
    })
  ).describe("再生するシンセのリスト"),
  duration: z.number().optional().describe("再生時間（ミリ秒）。デフォルトは10000（10秒）")
}
```



## インストール方法

### 前提条件

M1 Macで以下のソフトウェアを利用して動作確認を行いました。

- SuperCollider 3.13.0
- Node.js v22.2.0
- npm 10.7.0


### セットアップ

#### SuperColliderのインストール

- [SuperColliderの公式サイト](https://supercollider.github.io/download)からインストーラーをダウンロードしてインストールします。

#### Node.jsのインストール

- [Node.jsの公式サイト](https://nodejs.org/ja/download)を参照してインストールします。

#### MCPクライアントの設定

Claude DesktopやVS CodeなどMCPサーバーが利用可能なクライアントへ以下の設定を追加します。


- Claude Desktopの場合

`/Users/<ユーザー名>/Library/Application\ Support/Claude/claude_desktop_config.json` に以下の設定を追加します。

```json
{
  "mcpServers": {
    "supercollider-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@makotyo/supercollider-mcp",
      ]
    }
  }
}
```

- VS Codeの場合

VS Codeのユーザー設定（json）ファイルに以下のjsonブロックを追加してください。
設定を開くには、`Ctrl + Shift + P`を押して「Preferences: Open User Settings (JSON)」と入力します。

```json
{
  "mcp": {
    "servers": {
      "mcp-supercollider": {
        "command": "npx",
        "args": [
          "-y",
          "@makotyo/mcp-supercollider"
        ]
      }
    }
  }
}
```

## 使用例

以下のような操作が自然言語で可能になります：

- サイン波の生成

**ユーザー:**  
サイン波を出してください

**システム:**  
サイン波を5秒間再生しました。  
使用したSuperColliderコードは以下の通りです。  
`{ SinOsc.ar(440, 0, 0.2) }`  
このコードは、440Hzのサイン波（A4）を音量0.2で出力します。

- シンセ名: SimpleSine  
- コード: `{ SinOsc.ar(440, 0, 0.2) }`  
- 再生時間: 5秒

---

- エフェクトの適用

**ユーザー:**  
現在の音にリバーブを追加して、ディレイタイムを2秒に設定してください

**システム:**  
サイン波にリバーブを追加しました。使用したSuperColliderコードは以下の通りです。  
`{ FreeVerb.ar(SinOsc.ar(440, 0, 0.2), mix: 1, room: 1, damp: 0.5) }`  
このコードは、440Hzのサイン波（A4）を音量0.2で出力します。  
このコードはリバーブ効果を最大（mix: 1, room: 1）で適用していますが、「ディレイタイム2秒」という指定に正確に対応するには、リバーブではなく明示的なディレイ（例えばCombNやDelayN）を使う必要があります。ディレイタイム2秒のサイン波＋リバーブの例を希望されますか？

- シンセ名: SineWithReverb  
- コード: `{ FreeVerb.ar(SinOsc.ar(440, 0, 0.2), mix: 1, room: 1, damp: 0.5) }`  
- 再生時間: 5秒


## まとめ

MCPサーバーを活用することで、SuperColliderでより直感的に音作りができるようになります。  
さらに複雑なシーケンスの作成に挑みたい場合は生成されたコードを元にSuperColliderのIDEで編集していっても良いでしょう。

音楽制作の新しい可能性を広げるツールとして、ぜひ試してみてください。