---
title: "StemSplit MCP Server: แยกสเต็มใน 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 นำการแยกสเต็มด้วย AI เข้าสู่ Claude Desktop, Cursor, Cline, Windsurf และ Zed ผ่าน Model Context Protocol ติดตั้ง npm ครั้งเดียว — แยกเสียงร้อง + แบ็คกิ้ง + 6 สเต็มได้จากช่องแชต"
abstract: "TL;DR. เราเพิ่งปล่อย `stemsplit-mcp` — เซิร์ฟเวอร์ Model Context Protocol อย่างเป็นทางการของ StemSplit ติดตั้งครั้งเดียวด้วย `npx` ชี้ผู้ช่วย AI ของคุณมาที่เซิร์ฟเวอร์นี้ แล้วคุณก็สั่งลบเสียงร้อง สร้างคาราโอเกะ ดึงแบ็คกิ้ง และแยกสเต็มแบบ 4 หรือ 6 สเต็มได้ โดยตรงจากแชต ทั้งกับไฟล์เสียงในเครื่อง และ URL ของ YouTube ใช้งานได้ใน Claude Desktop, Cursor, Cline, Windsurf, Zed และไคลเอนต์อื่นที่รองรับ MCP ภายใต้ลิขสิทธิ์ MIT โอเพ่นซอร์สบน GitHub ไม่ต้องดูแลโครงสร้างพื้นฐานเอง"
locale: "th"
canonical: "https://stemsplit.io/th/blog/stemsplit-mcp-server-claude-cursor"
source: "stemsplit.io"
---

> **Source:** https://stemsplit.io/th/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: แยกสเต็มด้วย AI ใน Claude Desktop, Cursor, Cline, Windsurf และ Zed ผ่าน Model Context Protocol (2026)

**TL;DR.** เราเพิ่งปล่อย [**`stemsplit-mcp`**](https://www.npmjs.com/package/stemsplit-mcp) — เซิร์ฟเวอร์ Model Context Protocol อย่างเป็นทางการของ StemSplit ติดตั้งครั้งเดียวด้วย `npx` ชี้ผู้ช่วย AI ของคุณมาที่เซิร์ฟเวอร์นี้ แล้วคุณก็สั่งลบเสียงร้อง สร้างคาราโอเกะ ดึงแบ็คกิ้ง และแยกสเต็มแบบ 4 หรือ 6 สเต็มได้ **โดยตรงจากแชต** ทั้งกับไฟล์เสียงในเครื่อง **และ** URL ของ YouTube ใช้งานได้ใน Claude Desktop, Cursor, Cline, Windsurf, Zed และไคลเอนต์อื่นที่รองรับ MCP ภายใต้ลิขสิทธิ์ MIT [โอเพ่นซอร์สบน GitHub](https://github.com/StemSplit/stemsplit-mcp) ไม่ต้องดูแลโครงสร้างพื้นฐานเอง

รูปร่างของเวิร์กโฟลว์ AI จะเปลี่ยนเมื่อการแยกสเต็มเลิกเป็น "API ที่เรียกผ่าน curl จากสคริปต์" แล้วกลายเป็น "สิ่งที่แชตของฉันทำได้อยู่แล้ว" บทความนี้บอกวิธีและเหตุผล

---

## สิ่งที่เพิ่งออกมา

[**`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 เปิดตัวเมื่อปลายปี 2024 เพื่อให้ผู้ช่วย AI คุยกับเครื่องมือภายนอกผ่านอินเทอร์เฟซ JSON-RPC แบบเดียวกัน ปัจจุบัน MCP รองรับโดย Claude Desktop, Cursor, Cline, Windsurf, Zed, OpenDevin, Goose และไคลเอนต์อื่นที่กำลังเพิ่มขึ้นต่อเนื่อง

สิ่งที่มันเปิดให้ใช้:

| เครื่องมือ | ทำอะไร |
|---|---|
| `separate_stems` | ไฟล์ในเครื่องหรือ URL เสียงโดยตรง → เสียงร้อง, แบ็คกิ้ง, 4 หรือ 6 สเต็ม poll จนเสร็จและบันทึกลงดิสก์ |
| `separate_youtube` | URL YouTube → เสียงร้อง + แบ็คกิ้ง โดยฝั่งเซิร์ฟเวอร์ดาวน์โหลดและประมวลผลให้ |
| `get_job` / `list_jobs` | สถานะและประวัติงาน |
| `get_youtube_job` / `list_youtube_jobs` | เหมือนกัน เฉพาะงาน YouTube |
| `get_balance` | เครดิตคงเหลือเป็นวินาทีและนาที |
| `download_stems` | ขอ presigned URL ใหม่ของงานที่เสร็จแล้วและดาวน์โหลดอีกครั้ง |

พ่วงด้วย resource 4 ตัว (ยอดคงเหลือสด, งานล่าสุด, รายละเอียดงาน, รายละเอียดงาน YouTube) และ prompt 4 ตัว (เครื่องมือสร้างคาราโอเกะ, ตัวแยกเสียงร้อง, ชุด sampler 6 สเต็ม, แบ็คกิ้งจาก YouTube) ดู reference เต็มได้ที่ [GitHub README](https://github.com/StemSplit/stemsplit-mcp#readme)

กรณีใช้งานหลัก: **โยน path หรือ URL ของ YouTube เข้าไปในแชต รับสเต็มกลับมา** ไม่ต้องวาง pipeline HTTP ไม่ต้องเขียน polling ไม่ต้องเก็บกวาดไฟล์ชั่วคราว

---

## ทำไม MCP จึงเหมาะกับเสียง

ถ้าเคยอินทิเกรต API แยกสเต็มมาก่อน — ของเราหรือของใครก็ตาม — คุณรู้จักท่ารำนี้:

```
POST /jobs            → คืน job_id
GET  /jobs/:id        → poll ทุก 5 วินาทีจนกระทั่ง status=COMPLETED
GET  presigned_url    → ดาวน์โหลดสเต็มแต่ละไฟล์ลงดิสก์
```

สาม endpoint, หนึ่งลูป polling, URL หมดอายุ, ลอจิก retry สำหรับ 5xx ชั่วคราว ทุกทีมที่อินทิเกรตเสียงเขียนโค้ดเดิมซ้ำ MCP รวบเรื่องนี้ไว้ในตัวมัน

เคล็ดลับคือ: **ไฟล์เสียงไม่เดินผ่าน context ของแชต** ใหญ่เกินไป แทนที่จะส่งไฟล์ MCP แลกเปลี่ยน *การอ้างอิง* — path ของไฟล์และ URL — ขณะที่ไบต์จริงไหลตรงระหว่างเครื่องของคุณ, API ของ StemSplit และ Cloudflare R2 LLM จะเห็นแค่:

- *"สเต็มเสียงร้องอยู่ที่ `~/Downloads/stemsplit/job_abc123/vocals.mp3`"*

แล้วนำไปต่อเข้าเครื่องมือถัดไป (ถอดเสียง, normalize, อัปโหลดเข้าโปรเจกต์ DAW อะไรก็ได้) LLM ไม่จำเป็นต้องอ่านไฟล์ MP3 ขนาด 30 MB ด้วยตัวเองเลย

นี่คือเหตุผลที่เซิร์ฟเวอร์ MCP นี้ทำงานได้กับ LLM แบบโลคอลและโมเดล context สั้น โปรโตคอลถูกออกแบบมาเพื่อรูปแบบ "ทำงานหนักบนเครื่องของคุณแล้วคืนเฉพาะ reference" โดยตรง

---

## ติดตั้งในไม่ถึง 2 นาที

ต้องการสามอย่าง:

1. **Node.js 20+** (ตรวจด้วย `node --version`)
2. **API key ของ StemSplit** — สร้างที่ [stemsplit.io/app/settings/api](https://stemsplit.io/app/settings/api)
3. **ไคลเอนต์ที่รองรับ MCP** — ดูการตั้งค่าตามไคลเอนต์ด้านล่าง

จริง ๆ ไม่จำเป็นต้องลงแพ็กเกจ npm — ไคลเอนต์ส่วนใหญ่จะรันด้วย `npx -y stemsplit-mcp` แล้ว cache ครั้งแรก ถ้าชอบลงทั่วระบบ: `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` ดู snippet เต็มต่อไคลเอนต์ใน [คู่มือ docs](/developers/guides/mcp)

---

## หน้าตาเวลาใช้จริง

เมื่อตั้งค่าเสร็จ workflow ก็เหลือเพียงพูดคุย ตัวอย่างที่เราใช้กันเอง:

### ลบเสียงร้องจากไฟล์ในเครื่อง

> *"ทำเวอร์ชันคาราโอเกะของ `/Users/me/Music/song.mp3` ให้หน่อย"*

LLM เลือก `separate_stems` ด้วย `outputType=BOTH` เซิร์ฟเวอร์อัปโหลดไฟล์ poll จนเสร็จ ดาวน์โหลดเสียงร้อง + แบ็คกิ้งไปที่ `~/Downloads/stemsplit/<job-id>/` แล้วส่ง path ในเครื่องกลับให้ผู้ช่วย ผู้ช่วยจะชี้ให้คุณไปที่แบ็คกิ้ง

### YouTube → acapella ด้วย prompt เดียว

> *"ดึงเสียงร้องเคลียร์ ๆ จาก https://youtu.be/dQw4w9WgXcQ"*

เลือก `separate_youtube` StemSplit ดาวน์โหลดวิดีโอที่ฝั่งเซิร์ฟเวอร์ ทำการแยกสเต็ม แล้วคืน path ของสเต็มเสียงร้องกลับ ไม่ต้องใช้ `yt-dlp` ไม่ต้องเล่นเกม rate-limit

### 6 สเต็มสำหรับ sampling

> *"แบ่ง `~/Music/funk-bass.wav` ออกเป็น 6 สเต็มที่คุณภาพดีที่สุด"*

เลือก `separate_stems` กับ `outputType=SIX_STEMS` และ `quality=BEST` คุณจะได้ drums, bass, vocals, other, piano และ guitar เป็นไฟล์แยกแต่ละสเต็ม

### เช็คก่อนเริ่ม

> *"เหลือกี่นาที?"*

เลือก `get_balance` มีประโยชน์ก่อนเริ่มงานยาว ๆ

---

## ภายในกล่องมีอะไร

การตัดสินใจทางเทคนิคที่จะเริ่มเห็นผลเมื่อคุณพึ่งพาเซิร์ฟเวอร์จริง ๆ:

### Retry อัตโนมัติแบบ exponential backoff + jitter

เมื่อก่อน 502 เพียงครั้งเดียวระหว่าง polling 10 นาทีก็พอจะล้มงานทั้งงาน ตอนนี้:

- คำขอ **GET** จะ retry ได้สูงสุด 4 ครั้ง สำหรับเครือข่ายล่ม, 5xx, และ 429 (เคารพ `Retry-After`)
- **POST** ไปยัง endpoint สร้างงานเป็นแบบอนุรักษ์นิยม — เฉพาะ network error ที่ *พิสูจน์ได้ว่าเซิร์ฟเวอร์ไม่ได้รับ request* เท่านั้นที่จะ retry จะได้ไม่ถูกหักเงินสองรอบโดยไม่ได้ตั้งใจ
- **อัปโหลดไป R2** retry สูงสุด 3 ครั้ง โดยเปิดไฟล์เป็นสตรีมใหม่ทุกครั้ง (`ReadableStream` ฝั่งเว็บย้อนกลับไม่ได้)
- **ดาวน์โหลดจาก R2** retry กับ 5xx แต่ไม่ retry กับ 403 — 403 หมายถึง presigned URL หมดอายุ ทางที่ถูกคือขอ URL ใหม่ผ่าน `get_job`

ทุก retry จะถูก log ไปที่ stderr เพื่อให้เห็นกลไกทำงานเวลาเกิดปัญหา

### ตรวจสอบ path แบบสัมบูรณ์

path สัมพัทธ์อย่าง `song.mp3` แต่ก่อนจะถูกแปลงเทียบกับ working directory ของเซิร์ฟเวอร์ MCP เงียบ ๆ — สำหรับ Claude Desktop และ Cursor มักเป็น root ของระบบที่ LLM ไม่มีทางรู้ ตอนนี้เราปฏิเสธ path สัมพัทธ์ตั้งแต่ต้นด้วยข้อความที่บอก LLM ตรง ๆ ว่าให้ทำอะไรต่อ: *"ส่ง path สัมบูรณ์อย่าง `/Users/you/Music/song.mp3` หรือ path แบบ tilde อย่าง `~/Music/song.mp3` ถ้าไม่ทราบให้ถามผู้ใช้"*

### ข้อความ error แบบมีโครงสร้าง

error ทุกตัวมี `code` ที่เครื่องอ่านได้ (`INSUFFICIENT_CREDITS`, `RATE_LIMIT_EXCEEDED`, `FILE_TOO_LARGE`, `UNSUPPORTED_FORMAT` ฯลฯ) พร้อมข้อความสำหรับมนุษย์และคำแนะนำสำหรับเคสยอดนิยม LLM ไม่ต้องอ่านภาษาอังกฤษเพื่อเดาว่าผิดพลาดอะไร

### การแจ้งความคืบหน้า

การ poll จะถูกส่งต่อเป็น progress event ของ MCP งาน YouTube ยาว ๆ จะขึ้น "10% → 35% → 70% → 100%" ใน UI ของ Claude Desktop แทนที่จะดูเหมือนค้าง

---

## เทียบกับตัวเลือกที่มีอยู่

| ตัวเลือก | คุณ deploy อะไร | เหมาะกับ |
|---|---|---|
| **`stemsplit-mcp`** | แพ็กเกจ npm หนึ่งตัว + API key | workflow ภาษาธรรมชาติใน Claude / Cursor / Cline / Windsurf / Zed |
| **`n8n-nodes-stemsplit`** | community node ของ n8n | batch ที่ตั้งเวลาหรือ trigger ด้วย webhook ใน n8n |
| **HTTP API ดิบ ๆ** | curl / client เขียนเอง | การทำงานอัตโนมัติแบบ server-to-server, integration เฉพาะทาง |
| **`demucs-onnx`** (PyPI) | โมเดล ONNX ขนาด 316 MB ในแอป | งานออฟไลน์ / มือถือ / ไม่อยากผูกกับ API |
| **Demucs self-host** | GPU, คิว, server inference | โหลดภายในปริมาณสูงที่มี GPU อยู่แล้ว |

เซิร์ฟเวอร์ MCP คือคำตอบที่ถูกต้องเมื่อ *ผู้ใช้* เครื่องมือคือมนุษย์ในผู้ช่วย AI ตัวเลือกอื่นเหมาะเมื่อผู้ใช้คือซอฟต์แวร์

ทีมโปรดักชันหลายทีมเลือกใช้สองอย่าง: เซิร์ฟเวอร์ MCP สำหรับการสำรวจเชิงโต้ตอบและงานครั้งคราว ส่วน API หรือโมเดล ONNX สำหรับการประมวลผลปริมาณสูง

---

## โอเพ่นซอร์สโดยจงใจ

โปรเจกต์ทั้งหมดเป็น MIT: [github.com/StemSplit/stemsplit-mcp](https://github.com/StemSplit/stemsplit-mcp)

โค้ดเล็กพอที่จะอ่านจบในรอบเดียว — TypeScript ประมาณ 1.5 พันบรรทัด ไม่มี dependency แปลกประหลาดนอกจาก `@modelcontextprotocol/sdk` ของทางการและ `zod` ตัวช่วย retry, ตัวจำแนกแหล่งที่มา, ลอจิก polling และ mapper ของ error ต่างก็อยู่ในไฟล์ตัวเองพร้อม unit test

ถ้าต้องการ fork ไปต่อกับ backend แยกสเต็มของตัวเอง พื้นผิวที่ต้องแก้อยู่ใน [`src/client.ts`](https://github.com/StemSplit/stemsplit-mcp/blob/main/src/client.ts) ส่วน plumbing ของ MCP ใน `src/index.ts` คงเดิม

---

## ก้าวต่อไป

นี่คือ v0.2.0 ใน roadmap:

1. **Tool annotations** (`readOnlyHint`, `openWorldHint`) เพื่อให้ไคลเอนต์ MCP เข้มงวดข้าม confirm prompt สำหรับเครื่องมืออ่านอย่างเดียวเช่น `get_balance`
2. **ดาวน์โหลดสเต็มแบบขนาน** — ตอนนี้ทำแบบลำดับ ช้ากว่าที่ควรเป็น 6 เท่าในงาน 6 สเต็ม
3. **enumeration `recent-jobs` แบบสด** ให้ไคลเอนต์ MCP เปิดดูประวัติงานแบบ native
4. **resource subscribe / notify** สำหรับความคืบหน้าสดของงาน YouTube ยาว ๆ

ติดตาม [repo บน GitHub](https://github.com/StemSplit/stemsplit-mcp) เพื่อรับเวอร์ชันใหม่ — ทุกเวอร์ชันมาพร้อม CHANGELOG และ GitHub Release ที่ tag ไว้

---

## เซิร์ฟเวอร์ stemsplit-mcp ต่างจากการใช้ REST API ของ StemSplit ตรง ๆ ในปี 2026 อย่างไร?

สำหรับ workflow เชิงโต้ตอบ — *"จัดเสียง 5 เทคที่เพิ่งอัดให้หน่อย"*, *"ทำคาราโอเกะของลิงก์ YouTube นี้"*, *"สร้าง sampler จากอัลบั้มฟังก์นี้"* — เซิร์ฟเวอร์ MCP ดีกว่ามาก เพราะผู้ช่วย AI จัดการการเรียงลำดับทั้งหมด ไม่ว่าจะเป็นการจำแนกแหล่งที่มา อัปโหลด polling ดาวน์โหลด และการกู้ error คุณพิมพ์ประโยคเดียวก็ได้ path ไฟล์กลับมา สำหรับการทำงานอัตโนมัติแบบ server-to-server ที่ไม่มีมนุษย์ในลูป [REST API](https://stemsplit.io/developers/docs) ยังคงเป็นเครื่องมือที่ใช่ — auth เดียวกัน โมเดลเดียวกัน แต่ไม่ต้องมี runtime MCP

## ใช้ stemsplit-mcp กับโมเดล AI ในเครื่องหรือ LLM ที่โฮสต์เองในปี 2026 ได้ไหม?

ได้ — ไคลเอนต์ที่รองรับ MCP ทุกตัวใช้ได้ รวมถึงตัวที่ใช้โมเดลในเครื่อง เซิร์ฟเวอร์ MCP รันเป็น process แบบ stdio และไม่สนว่าฝั่งตรงข้ามเป็น LLM ใด เราทดสอบกับ Claude Desktop (Claude 4.5 Sonnet / Opus), Cursor (เลือก backend model ได้), Cline (ตั้งค่าได้), Windsurf, Zed และ Goose ที่รันโมเดลในเครื่องผ่าน Ollama สถาปัตยกรรมตั้งใจให้ไม่ขึ้นอยู่กับโมเดลเฉพาะ

## เซิร์ฟเวอร์ MCP รับมือ URL ของ YouTube อย่างไรโดยไม่ต้องผูก yt-dlp?

ใช้ endpoint ฝั่งเซิร์ฟเวอร์ `/youtube-jobs` ของ StemSplit ซึ่งโหลดวิดีโอบน infrastructure ของเรา รันการแยกสเต็มที่นั่น แล้วเปิดผลลัพธ์ผ่าน presigned URL ตัวเซิร์ฟเวอร์ MCP เองไม่เคยเรียก `yt-dlp` ในเครื่อง — แปลว่าไม่เจอปัญหา rate-limit ไม่เจอบั๊กเฉพาะแพลตฟอร์ม และไม่เปิดความเสี่ยงทางกฎหมายให้ผู้ใช้ที่รันดาวน์โหลดในเครื่อง ข้อแลกคือ URL ต้องเข้าถึงได้สาธารณะ วิดีโอที่ส่วนตัวหรือถูกจำกัดอายุไม่ผ่านทางนี้

## คุณภาพการแยกสเต็มผ่าน stemsplit-mcp เท่ากับเว็บแอป StemSplit ไหม?

เท่ากันเป๊ะ เซิร์ฟเวอร์ MCP เป็น client บาง ๆ ที่เรียก endpoint `/api/v1/jobs` เดียวกับที่เว็บแอปใช้ ทั้งโมเดล ระดับคุณภาพ (FAST / BALANCED / BEST) และฟอร์แมตเอาต์พุต (MP3 / WAV / FLAC) เหมือนกัน ต่างกันแค่จุด trigger: แชตในผู้ช่วย AI แทนการอัปโหลดผ่านเบราว์เซอร์

## ไคลเอนต์ MCP ตัวไหนใช้กับ stemsplit-mcp ได้บ้าง?

ไคลเอนต์ใดก็ตามที่รองรับ stdio transport มาตรฐานของ MCP ที่ยืนยันแล้ว: Claude Desktop, Cursor, Cline (VS Code), Windsurf, Zed, Goose (ไคลเอนต์ MCP โอเพ่นซอร์สของ Block) และ OpenDevin Model Context Protocol คือมาตรฐานของ Anthropic ดู [รายการไคลเอนต์ทางการ](https://modelcontextprotocol.io/clients) เพื่อข้อมูลล่าสุดเมื่อมีไคลเอนต์ใหม่เพิ่มการรองรับ

---

## ลองดู

ถ้ามีบัญชี StemSplit อยู่แล้ว ให้[สร้าง API key](https://stemsplit.io/app/settings/api) แล้วทำตาม[คู่มือตั้งค่า MCP](/developers/guides/mcp) ถ้ายังไม่มี ให้[เริ่มฟรี](https://stemsplit.io/free-trial) — แพ็กเกจฟรีเพียงพอจะลองทุกเครื่องมือในเซิร์ฟเวอร์นี้

ถ้าสร้างอะไรเจ๋ง ๆ ได้ อยากเห็นด้วยที่ [github.com/StemSplit/stemsplit-mcp/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/th/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.*
