> For the complete documentation index, see [llms.txt](https://getsquish.gitbook.io/squish/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://getsquish.gitbook.io/squish/th/reference/mcp.md).

# เซิร์ฟเวอร์ MCP

เซิร์ฟเวอร์ MCP เป็นเพียงตัวห่อบางๆ ครอบเอนจินตัวเดียวกันเป๊ะกับ [CLI](/squish/th/reference/cli.md) — ใช้ไปป์ไลน์เดียวกัน ไฟล์ผลลัพธ์เดียวกัน และความหมายของหน้าต่างแบบเดียวกัน มันทำงานทั้งหมดบนเครื่องของคุณและสื่อสาร MCP ผ่าน **stdio**. ถ้าไคลเอนต์ของคุณรับแค่ URL ตัวเชื่อมต่อ (Claude Desktop, claude.ai) ให้ใช้ [ปลายทาง MCP ระยะไกลที่โฮสต์ไว้](/squish/th/reference/remote-mcp.md) แทน

## การเริ่มเซิร์ฟเวอร์

```bash
squish mcp
```

`squish mcp` ไม่มีอาร์กิวเมนต์ (อาร์กิวเมนต์ที่ต่อท้ายถือเป็นข้อผิดพลาดในการใช้งาน) stdout เป็นของช่องทางสื่อสาร MCP — เซิร์ฟเวอร์จะไม่พิมพ์อย่างอื่นลงไป ทำให้การจัดกรอบแบบ stdio ยังสะอาดอยู่ ข้อกำหนดเหมือนกับ CLI: Node ≥ 20, `ffmpeg` + `ffprobe` อยู่ใน PATH

## การตั้งค่าไคลเอนต์

ใช้ได้กับ Claude Code, Claude Desktop, Cursor, Hermes และไคลเอนต์ MCP แบบ stdio ใดๆ:

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

ดู [เริ่มต้นใช้งานเร็ว: MCP](/squish/th/getting-started/quickstart-mcp.md) สำหรับการตั้งค่าแยกตามไคลเอนต์

## เครื่องมือ: squish\_video

เซิร์ฟเวอร์เปิดเผยอย่าง **เครื่องมือเดียว**ชื่อว่า `squish_video` (ชื่อถูกตรึงไว้แล้ว — ดู [ความเสถียรและการกำหนดเวอร์ชัน](/squish/th/reference/stability.md)). ชื่อเรื่อง: *"บีบวิดีโอให้เป็นแผ่นภาพติดต่อที่มีเวลาประทับ"*.

คำอธิบายของเครื่องมือสอนโมเดลเรื่อง [ลูปการนำทาง](/squish/th/the-primitive/the-navigation-loop.md): โค้ดเวลาเป็นค่าที่อ้างอิงแบบสัมบูรณ์จากวิดีโอต้นฉบับ ดังนั้นถ้าจะซูมเข้าไปดูช่วงที่เห็นบนแผ่นภาพ โมเดลจะเรียกเครื่องมืออีกครั้งโดยตั้งค่า `start`/`end` ให้เป็นโค้ดเวลาเหล่านั้น — การซูมแต่ละครั้งจะได้โค้ดเวลาที่ละเอียดขึ้น (ภาพรวม → ช่วง → จุดเวลา) เอเจนต์ไม่ต้องมีพรอมป์ต์เพิ่มเพื่อค้นพบลูปนี้

### พารามิเตอร์

| พารามิเตอร์  | ชนิด                                     | ต้องระบุ | ค่าเริ่มต้น              | ข้อจำกัด / ความหมาย                                                                                                                                                                                                                                            |
| ------------ | ---------------------------------------- | -------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `video_path` | string                                   | **ใช่**  | —                        | พาธแบบสัมบูรณ์ไปยัง **ไฟล์วิดีโอ** ในเครื่อง (อะไรก็ตามที่ ffmpeg ถอดรหัสได้).                                                                                                                                                                                 |
| `density`    | `"3x3"` \| `"4x4"` \| `"5x5"` \| `"6x6"` | ไม่      | `"3x3"`                  | ความหนาแน่นของตาราง: 9 / 16 / 25 / 36 เฟรมต่อแผ่น `3x3` กู้คืนสิ่งที่เกิดขึ้น; ตารางที่หนาแน่นกว่า (`4x4`–`6x6`) กู้คืนได้ว่าทำอย่างไร                                                                                                                         |
| `start`      | number \| string                         | ไม่      | `0` (จุดเริ่มต้นของคลิป) | จุดเริ่มของหน้าต่างซูม — วินาที (`67.5`) หรือโค้ดเวลาตามที่ประทับบนแผ่นภาพ (`"1:07"`, `"1:07.3"`). **อ้างอิงแบบสัมบูรณ์ในวิดีโอต้นฉบับ** ต้อง ≥ 0 และอยู่ก่อนจบคลิป                                                                                            |
| `end`        | number \| string                         | ไม่      | จบคลิป                   | จุดสิ้นสุดของหน้าต่างซูม — รูปแบบเดียวกับ `start`. ค่าที่ **เลยจบคลิปจะถูกปัด** ให้เท่ากับจุดจบของคลิป ต้องอยู่หลัง `start`; หน้าต่างที่ต่ำกว่า 2 มิลลิวินาทีต่อหนึ่งช่องจะถูกปฏิเสธ (ดู [ความหมายของหน้าต่าง](/squish/th/reference/cli.md#window-semantics)). |
| `out_dir`    | string                                   | ไม่      | ข้างไฟล์อินพุต           | ไดเรกทอรีสำหรับแผ่นผลลัพธ์; จะสร้างให้ถ้ายังไม่มี                                                                                                                                                                                                              |

`start`/`end` รองรับทุกอย่างที่แผ่นหนึ่งแผ่นประทับไว้ — ดู [คุณสมบัติการไปกลับ](/squish/th/reference/sheet-format.md#round-trip-property).

### เพย์โหลดผลลัพธ์

เมื่อสำเร็จ เครื่องมือจะส่งกลับบล็อกเนื้อความแบบข้อความหนึ่งบล็อก ซึ่งข้อความเป็นออบเจ็กต์ JSON: ฟิลด์ [CLI `--json` ของสัญญา](/squish/th/reference/cli.md#--json-output) **รวมถึง** `โค้ดเวลา`, ประทับด้วยสตริงสัญญาของตัวเอง:

```json
{
  "input": "/abs/path/clip.mov",
  "duration": 20.275,
  "frames": 9,
  "sheets": 1,
  "files": ["/abs/path/clip.sheet-1.jpg"],
  "warnings": [],
  "timecodes": [["0:01", "0:03", "0:05", "0:07", "0:10", "0:12", "0:14", "0:16", "0:19"]],
  "contract": "squish-mcp-v0"
}
```

| คีย์       | ชนิด         | มีอยู่                          | ความหมาย                                                                                                                                                                                                                                                                                                                                  |
| ---------- | ------------ | ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `input`    | string       | เสมอ                            | พาธอินพุตที่อ้างอิงแบบสัมบูรณ์ที่แก้แล้ว                                                                                                                                                                                                                                                                                                  |
| `duration` | number       | เสมอ                            | ความยาวคลิปทั้งหมดเป็นวินาที (ไม่ใช่ความยาวของหน้าต่าง).                                                                                                                                                                                                                                                                                  |
| `window`   | object       | เฉพาะเมื่อ `start`/`end` ถูกส่ง | `{ "start": <s>, "end": <s> }` — ขอบเขตที่แก้แล้วเป็นวินาที หลังจากตั้งค่าเริ่มต้นและปัดปลายให้ไม่เกิน ขนาดละเอียดระดับมิลลิวินาที ปรากฏระหว่าง `duration` และ `เฟรม`.                                                                                                                                                                    |
| `เฟรม`     | number       | เสมอ                            | จำนวนเฟรมทั้งหมดที่สุ่ม (`แผ่น × ช่อง`).                                                                                                                                                                                                                                                                                                  |
| `แผ่น`     | number       | เสมอ                            | ไฟล์แผ่นที่สร้างขึ้น                                                                                                                                                                                                                                                                                                                      |
| `ไฟล์`     | string\[]    | เสมอ                            | พาธแบบสัมบูรณ์ไปยังไฟล์ JPEG ของแผ่นภาพ เรียงตามลำดับ อ่านด้วย vision                                                                                                                                                                                                                                                                     |
| `คำเตือน`  | string\[]    | เสมอ                            | ปัญหาที่ไม่ร้ายแรง (เช่น เฟรมที่อ่านไม่ได้ทำให้ช่องนั้นเป็นสีดำ)                                                                                                                                                                                                                                                                          |
| `โค้ดเวลา` | string\[]\[] | เสมอ                            | หนึ่งอาร์เรย์ **ต่อหนึ่งแผ่น**, หนึ่งสตริง **ต่อหนึ่งเฟรม**, ตามลำดับช่อง (ซ้าย→ขวา, บน→ล่าง) เหมือนกับป้ายที่ประทับบนพิกเซลของแผ่นภาพ — JSON กับภาพจะไม่ขัดกัน รูปแบบ `m:ss`; แบบซับวินาที `m:ss.d` (ลงได้ถึง `m:ss.ddd`) เมื่อหน้าต่างสั้น — ดู [ความละเอียดแบบปรับอัตโนมัติ](/squish/th/reference/sheet-format.md#adaptive-precision). |
| `สัญญา`    | string       | เสมอ                            | `"squish-mcp-v0"` — ใช้อ่านเพื่อตรวจจับการเปลี่ยนแปลงที่ทำให้เข้ากันไม่ได้                                                                                                                                                                                                                                                                |

ขั้นตอนที่ตั้งใจไว้: เรียกเครื่องมือ อ่านไฟล์ใน `ไฟล์` ด้วย vision อ้างอิงโค้ดเวลา และซูมด้วย `start`/`end` ตรงที่ยังมีความไม่แน่ใจ

### พฤติกรรมเมื่อเกิดข้อผิดพลาด

ความล้มเหลวใดๆ จะส่งกลับเป็นข้อผิดพลาดของเครื่องมือ MCP — `isError: true` พร้อมบล็อกเนื้อความแบบข้อความเพียงบล็อกเดียวที่มีข้อความแสดงข้อผิดพลาด จะไม่มีผลลัพธ์ JSON รายการข้อความที่คุณจะพบ:

| ความล้มเหลว                                  | ข้อความ                                                                                                                                                                                            |
| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| แยกไม่ออก `start`/`end`                      | `ไม่สามารถแยก start "<value>" ได้ — ใช้วินาที (90) หรือโค้ดเวลา (1:30, 1:07.3)` (รูปแบบเดียวกันสำหรับ `end`)                                                                                       |
| ไม่พบไฟล์อินพุต                              | `ไม่พบอินพุต: <absolute path>`                                                                                                                                                                     |
| ค่าติดลบ `start`                             | `start ต้องเป็นเวลาที่ ≥ 0`                                                                                                                                                                        |
| `start` ที่/หลังจบคลิป                       | `start (<t>) อยู่ที่/หลังจุดจบของคลิป (<duration>)`                                                                                                                                                |
| หน้าต่างว่าง                                 | `หน้าต่างว่าง — end (<t>) ต้องอยู่หลัง start (<t>)`                                                                                                                                                |
| หน้าต่างต่ำกว่าขีดจำกัด 2 มิลลิวินาทีต่อช่อง | `หน้าต่างเล็กเกินกว่าจะแยกอ้างอิงได้ชัดเจน: <N> ช่องภายใน <X> มิลลิวินาที (เอนจินไล่ตามความละเอียดระดับมิลลิวินาที — ขั้นต่ำประมาณ <2N> มิลลิวินาทีที่ความหนาแน่นนี้); ให้ซูมออกหรือลดความหนาแน่น` |

ข้อผิดพลาดของหน้าต่างถูกออกแบบให้เป็น *ข้อผิดพลาดเพื่อการสอน*: มันบอกโมเดลว่าควรแก้การเรียกครั้งถัดไปอย่างไร (ซูมออก หรือ ลดความหนาแน่น) แทนที่จะล้มเหลวแบบไม่บอกอะไร

## ความสัมพันธ์กับ CLI

ทั้งสองช่องทางเรียกฟังก์ชันเอนจินเดียวกัน ไม่มีการเขียนตรรกะของไปป์ไลน์ใหม่ ผลลัพธ์ MCP คือรายงานของ CLI บวก `timecodes[][]`, ภายใต้ `สัญญา` สตริงของตัวเอง เพราะโครงสร้างต่างกัน เฟรมชั่วคราวจะถูกล้างเมื่อสำเร็จหรือเกิดข้อผิดพลาด เช่นเดียวกับใน [CLI](/squish/th/reference/cli.md#temp-frame-cleanup).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://getsquish.gitbook.io/squish/th/reference/mcp.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
