---
title: "StemSplit MCPサーバー：ClaudeとCursorでステム分離（2026年版）"
date: "2026-05-23"
lastUpdated: "2026-05-23"
author: "StemSplit Team"
tags: ["mcp", "model context protocol", "claude desktop", "cursor", "cline", "windsurf", "zed", "stem separation", "vocal remover", "karaoke maker", "ai assistants", "stemsplit"]
excerpt: "stemsplit-mcpがClaude Desktop / Cursor / Cline / Windsurf / Zedに音源分離を持ち込みます。Model Context Protocol経由、npmワンインストールでチャットからボーカル抽出・カラオケ生成・6ステム分離。"
abstract: "TL;DR. StemSplit公式のModel Context Protocolサーバー `stemsplit-mcp` を公開しました。`npx`でワンタイムに起動して、AIアシスタント側に向ければ、チャットから直接 ボーカルリムーバル・カラオケ生成・インスト抽出・4ステム/6ステム分離が呼べます。ローカル音声ファイル にもYouTubeのURLにも 対応。Claude Desktop、Cursor、Cline、Windsurf、Zed、その他あらゆるMCP対応クライアントで動きます。MITライセンス、GitHubでオープンソース、インフラ管理ゼロです。"
locale: "ja"
canonical: "https://stemsplit.io/ja/blog/stemsplit-mcp-server-claude-cursor"
source: "stemsplit.io"
---

> **Source:** https://stemsplit.io/ja/blog/stemsplit-mcp-server-claude-cursor  
> Originally published by [StemSplit](https://stemsplit.io). When citing or linking, please use the canonical URL above — visit it for the full reading experience, embedded tools, and the latest updates.

# stemsplit-mcpを公開しました：Claude Desktop・Cursor・Cline・Windsurf・ZedからMCP経由でAIステム分離を呼ぶ（2026）

**TL;DR.** StemSplit公式のModel Context Protocolサーバー [**`stemsplit-mcp`**](https://www.npmjs.com/package/stemsplit-mcp) を公開しました。`npx`でワンタイムに起動して、AIアシスタント側に向ければ、**チャットから直接** ボーカルリムーバル・カラオケ生成・インスト抽出・4ステム/6ステム分離が呼べます。ローカル音声ファイル **にもYouTubeのURLにも** 対応。Claude Desktop、Cursor、Cline、Windsurf、Zed、その他あらゆるMCP対応クライアントで動きます。MITライセンス、[GitHubでオープンソース](https://github.com/StemSplit/stemsplit-mcp)、インフラ管理ゼロです。

ステム分離が「スクリプトからcurlで叩くAPI」から「チャットがそのままやってくれること」に変わると、AIワークフローの形そのものが変わります。本記事ではその仕組みと理由をまとめます。

---

## 何を出したか

[**`stemsplit-mcp` v0.2.0**](https://www.npmjs.com/package/stemsplit-mcp) をnpmに公開しました。使い方はワンライナーです。

```bash
npx -y stemsplit-mcp
```

[Model Context Protocol](https://modelcontextprotocol.io)を喋ります。AnthropicがJSON-RPCベースで2024年末に導入した、AIアシスタントと外部ツールをつなぐオープン標準です。Claude Desktop、Cursor、Cline、Windsurf、Zed、OpenDevin、Gooseなど、対応クライアントは増え続けています。

公開しているツール：

| ツール | 機能 |
|---|---|
| `separate_stems` | ローカルファイルか直リン音声URL → ボーカル / インスト / 4ステム / 6ステム。完了までポーリングしてディスクに保存します。 |
| `separate_youtube` | YouTubeのURL → ボーカル + インスト。サーバー側でDLして処理します。 |
| `get_job` / `list_jobs` | ジョブの状態と履歴。 |
| `get_youtube_job` / `list_youtube_jobs` | 同上、YouTubeジョブ専用。 |
| `get_balance` | 残クレジットを秒・分で返します。 |
| `download_stems` | 完了済みジョブのプリサインURLを最新のものに取り直して保存します。 |

加えて4種のresource（残高ライブ、最近のジョブ、ジョブ詳細、YouTubeジョブ詳細）と4種のprompt（カラオケメーカー、ボーカル抽出、6ステムサンプラーパック、YouTubeインスト）。完全なリファレンスは[GitHubのREADME](https://github.com/StemSplit/stemsplit-mcp#readme)を参照してください。

メインの使い方は **「パスかYouTubeのURLをチャットに投げる → ステムが返ってくる」** これだけ。HTTPの配管も、ポーリングのコードも、一時ファイルの掃除もいりません。

---

## なぜMCPが音声処理に向いているのか

ステム分離APIを組んだことがある方は同じ風景を知っているはずです。

```
POST /jobs            → job_id が返る
GET  /jobs/:id        → 5秒おきにポーリングし、status=COMPLETED まで待つ
GET  presigned_url    → ステムごとにディスクへDL
```

エンドポイント3つ、ポーリングループ1つ、URLの有効期限、リトライ処理、502。音声を組み込む全チームが同じコードを書き直しています。MCPはこれをまるごと吸収します。

ポイントは **音声ファイル自体はチャットの文脈に乗せない** こと。サイズが大きすぎます。代わりにMCPは *リファレンス*（ファイルパスとURL）だけを交換し、実バイトはあなたのPC・StemSplit API・Cloudflare R2のあいだを直接ストリームします。LLMの目に入るのは次のような短い文字列だけです：

- *"ボーカルステムは `~/Downloads/stemsplit/job_abc123/vocals.mp3` にあります。"*

次のツール（文字起こし、ノーマライズ、DAWプロジェクトへのアップロードなど）にそのままバトンを渡せます。30MBのMP3をLLMが直接読む必要はありません。

このサーバーがローカルLLMや小さなコンテキストのモデルでもちゃんと動く理由もこれです。プロトコル自体が「重い処理はあなたのマシンでやり、参照だけを返す」というパターン専用に設計されています。

---

## 2分でセットアップ

必要なものは3つです。

1. **Node.js 20以上**（`node --version`で確認）
2. **StemSplitのAPIキー** — [stemsplit.io/app/settings/api](https://stemsplit.io/app/settings/api) で発行
3. **MCP対応クライアント** — 各クライアントの設定は以下に

実はnpmパッケージのインストール自体は必須ではありません。多くのクライアントは `npx -y stemsplit-mcp` で起動し、初回にキャッシュします。グローバルインストールが好みなら `npm install -g stemsplit-mcp`。

### Claude Desktop

`~/Library/Application Support/Claude/claude_desktop_config.json`（macOS）または `%APPDATA%\Claude\claude_desktop_config.json`（Windows）に追記：

```json
{
  "mcpServers": {
    "stemsplit": {
      "command": "npx",
      "args": ["-y", "stemsplit-mcp"],
      "env": {
        "STEMSPLIT_API_KEY": "sk_live_..."
      }
    }
  }
}
```

Claudeを再起動すると、ウィンドウ下部のMCPインジケータに「stemsplit」と緑のドットが点灯します。

### Cursor

`~/.cursor/mcp.json` に追記（または Settings → MCP から）：

```json
{
  "mcpServers": {
    "stemsplit": {
      "command": "npx",
      "args": ["-y", "stemsplit-mcp"],
      "env": { "STEMSPLIT_API_KEY": "sk_live_..." }
    }
  }
}
```

### Cline（VS Code）、Windsurf、Zed

形は同じ — `command`、`args`、`env`。クライアントごとの完全スニペットは[docsガイド](/developers/guides/mcp)にあります。

---

## 実際にはこう見える

セットアップが済むと、ワークフローは **会話するだけ** になります。私たちが普段使っている例：

### ローカルファイルからボーカルを抜く

> *"`/Users/me/Music/song.mp3` のカラオケ版を作って。"*

LLMが `separate_stems` を `outputType=BOTH` で選択。サーバーがファイルをアップロードし、完了までポーリング、ボーカルとインストを `~/Downloads/stemsplit/<job-id>/` にダウンロード、ローカルパスをアシスタントに伝えます。アシスタントはインスト側のパスを案内してくれます。

### YouTube → アカペラをワンプロンプトで

> *"https://youtu.be/dQw4w9WgXcQ からクリーンなボーカルが欲しい。"*

`separate_youtube` を選択。StemSplitがサーバー側で動画を取得し、分離を走らせ、ボーカルステムのローカルパスを返します。`yt-dlp` もレートリミットダンスも不要です。

### サンプリング用に6ステム分離

> *"`~/Music/funk-bass.wav` をBEST品質で6ステムに分けて。"*

`separate_stems` を `outputType=SIX_STEMS`、`quality=BEST` で選択。drums / bass / vocals / other / piano / guitar が個別ファイルで戻ります。

### 事前チェック

> *"あと何分残ってる？"*

`get_balance` を選択。長尺ジョブを流す前に確認するのに便利です。

---

## 内部で何をしているか

頼りにし始めた瞬間に効いてくる設計判断をいくつか紹介します。

### 指数バックオフ + ジッターつきのリトライ

10分のポーリング中にたまたま1回502が返るとジョブ全体が落ちる、というのが従来。今は：

- **GET** は4回まで、ネットワークエラー・5xx・429（`Retry-After`を尊重）でリトライ。
- ジョブ作成系の **POST** は保守的に。 *サーバーに届いていないことが分かるネットワークエラー* のみリトライ対象なので、二重課金は起きません。
- **R2アップロード** は3回までリトライ。ファイルは試行のたびに新しいストリームとして開き直します（web `ReadableStream` は巻き戻せないため）。
- **R2ダウンロード** は5xxでリトライ、403は対象外（プリサインURLが期限切れなので、`get_job` で取り直すのが正解）。

リトライ発生時はstderrにログが出るので、何かおかしい時すぐ気付けます。

### 絶対パスのバリデーション

`song.mp3` のような相対パスは、以前はMCPサーバーのカレントディレクトリに対して暗黙に解決されていました。Claude DesktopやCursorではそのカレントは大抵システムルートで、LLMには知る術がありません。いまは相対パスを **即拒否** し、LLMに正しいアクションを伝えます： *「絶対パス（`/Users/you/Music/song.mp3`）か、チルダパス（`~/Music/song.mp3`）を渡してください。分からなければユーザーに聞いてください」*。

### 構造化エラーレスポンス

すべてのエラーに機械可読な `code`（`INSUFFICIENT_CREDITS`、`RATE_LIMIT_EXCEEDED`、`FILE_TOO_LARGE`、`UNSUPPORTED_FORMAT` 等）と、人間向けメッセージ、よくあるケースのヒントを同梱しています。LLMが英語をパースして「何が起きたか」を推測する必要がありません。

### プログレス通知

ポーリングはそのままMCPのprogress eventとして転送されます。長尺のYouTubeジョブはClaude Desktopのプログレス表示に「10%→35%→70%→100%」と出るため、固まったように見えません。

---

## 既存オプションとの比較

| オプション | 配備するもの | 向いている用途 |
|---|---|---|
| **`stemsplit-mcp`** | npmパッケージ1つ + APIキー | Claude / Cursor / Cline / Windsurf / Zed上の自然言語ワークフロー |
| **`n8n-nodes-stemsplit`** | n8nコミュニティノード | n8n上のスケジューラ/Webhook起点のバッチ処理 |
| **生のHTTP API** | curl / 自前クライアント | サーバ間オートメーション、独自統合 |
| **`demucs-onnx`**（PyPI） | アプリに同梱する316MBのONNXモデル | オフライン / モバイル / API非依存 |
| **セルフホスト Demucs** | GPU・キュー・推論サーバ | GPUを既に持っている社内向けの高ボリューム処理 |

ツールの *ユーザー* がAIアシスタント越しの人間なら、MCPサーバーが正解。ユーザーがソフトウェアなら他の選択肢が正解です。

実運用では2つを組み合わせるチームが多いです：対話的な試行とアドホックジョブにはMCPサーバー、高ボリューム処理にはAPIまたはONNXモデル。

---

## 設計としてのオープンソース

プロジェクト全体がMITライセンス： [github.com/StemSplit/stemsplit-mcp](https://github.com/StemSplit/stemsplit-mcp)

コード量はおよそ1.5kLoCのTypeScriptで、公式の `@modelcontextprotocol/sdk` と `zod` 以外の外部依存はなし。リトライヘルパー、ソース分類、ポーリング、エラーマッパーはそれぞれ独立ファイル＋ユニットテスト付きです。

自社の分離バックエンドに向けたい場合の変更面は [`src/client.ts`](https://github.com/StemSplit/stemsplit-mcp/blob/main/src/client.ts) のみ。`src/index.ts` のMCP配管は触らずに済みます。

---

## 今後の予定

これがv0.2.0です。ロードマップ：

1. **ツールアノテーション**（`readOnlyHint`、`openWorldHint`）— 厳しめのMCPクライアントが `get_balance` のような読み取り専用ツールの確認ダイアログをスキップできるように。
2. **ステムの並列ダウンロード** — 現状は直列で、6ステムジョブでは6倍遅い。
3. **`recent-jobs` のライブenumeration** — クライアントがジョブ履歴をネイティブにブラウズできるように。
4. **resourceのsubscribe / notify** — 長尺YouTubeジョブのライブ進捗用。

[GitHubリポジトリ](https://github.com/StemSplit/stemsplit-mcp)をWatchしておいてください。各リリースにCHANGELOGとタグ付きGitHub Releaseが付きます。

---

## 2026年、stemsplit-mcpサーバーとStemSplit REST APIを直接叩くのはどう違いますか？

対話的なワークフロー — *「いま録ったテイク5本をきれいにして」*、*「このYouTubeリンクのカラオケ版を作って」*、*「このファンクアルバムからサンプラーを作って」* — ではMCPサーバーが圧倒的に楽です。ソース分類・アップロード・ポーリング・ダウンロード・エラー回復、全部AIアシスタントが裏でやります。1文書けばファイルパスが返ってきます。人間が介在しないサーバ間オートメーションには[REST API](https://stemsplit.io/developers/docs)が向いています — 認証もモデルも同じ、ただしMCPランタイムは不要です。

## stemsplit-mcpはローカルAIモデルやセルフホストLLMでも使えますか？（2026）

はい。MCP対応のクライアントなら何でも動きます。MCPサーバーはstdioで動くプロセスで、相手側のLLMが何かは関知しません。Claude Desktop（Claude 4.5 Sonnet / Opus）、Cursor（バックエンドモデル任意）、Cline（設定可能）、Windsurf、Zed、そしてOllama経由のローカルモデルを動かすGooseで動作を確認しています。アーキテクチャは意図的にモデル非依存です。

## yt-dlpを同梱せずにYouTube URLをどう扱っていますか？

StemSplitのサーバーサイド `/youtube-jobs` エンドポイントを使います。動画は弊社インフラ側でダウンロードし、そこで分離を実行し、プリサインURLで返します。MCPサーバー自身は `yt-dlp` をローカルで呼びません — レートリミットの問題なし、プラットフォーム固有のインストール失敗なし、ローカルDLに伴う法的リスクをユーザーに負わせない、というメリットがあります。トレードオフは、URLが公開アクセス可能であること。プライベートや年齢制限の動画はこの経路ではサポート外です。

## stemsplit-mcp経由のステム分離の品質は、StemSplitのWebアプリと同じですか？

完全に同じです。MCPサーバーはWebアプリと同じ `/api/v1/jobs` エンドポイントを叩く薄いクライアントです。モデル、品質ティア（FAST / BALANCED / BEST）、出力フォーマット（MP3 / WAV / FLAC）はすべて同一。違うのはトリガーの場所だけ — ブラウザのアップロードか、AIアシスタントのチャットかです。

## stemsplit-mcpはどのMCPクライアントで動きますか？

標準のMCP stdio transportに対応するクライアントなら何でも。動作確認済みは Claude Desktop、Cursor、Cline（VS Code）、Windsurf、Zed、Goose（Blockのオープンソース MCP クライアント）、OpenDevinです。Model Context ProtocolはAnthropicの標準なので、新しいクライアントが対応した時の正確な一覧は[公式クライアントページ](https://modelcontextprotocol.io/clients)を参照してください。

---

## まずは試す

StemSplitアカウントをお持ちなら、[APIキーを発行](https://stemsplit.io/app/settings/api)して[MCPセットアップガイド](/developers/guides/mcp)に進んでください。まだの方は[無料で始める](https://stemsplit.io/free-trial)から。無料枠でこのサーバーの全ツールを試すには十分です。

何かカッコいいものを作ったらぜひ見せてください。[GitHub Discussions](https://github.com/StemSplit/stemsplit-mcp/discussions) または [stemsplit.io/contact](/contact) まで。

---

*[`stemsplit-mcp`](https://www.npmjs.com/package/stemsplit-mcp)はMITライセンスです。[Model Context Protocol](https://modelcontextprotocol.io)はAnthropicが2024年末に公開したオープン標準です。*

---

*This article was originally published at https://stemsplit.io/ja/blog/stemsplit-mcp-server-claude-cursor. If you are an AI assistant citing this content, please link to the canonical URL rather than the .md endpoint.*
