Postiz Media Manager - MCP Server
MCP (Model Context Protocol) Server สำหรับจัดการและเคลียร์ media ที่ไม่ถูกใช้งานใน Postiz
คุณสมบัติหลัก
ดึงรายการ Media IDs ที่ถูกป้องกัน - media ที่ถูกใช้ในโพสต์สถานะ draft, scheduled, หรือ queued
ค้นหา Orphan Media - media ที่ไม่ได้ถูกใช้ในโพสต์อนาคตใด ๆ
ลบ Media อัตโนมัติ - พร้อม dry-run mode เพื่อดูผลลัพธ์ก่อนลบจริง
สถิติการใช้งาน Media - แสดงจำนวน media ทั้งหมด, ที่ถูกป้องกัน, และ orphan
โครงสร้างโปรเจกต์
การติดตั้ง
1. Clone และติดตั้ง dependencies
2. ตั้งค่า Environment Variables
สร้างไฟล์ .env จาก .env.example:
แก้ไขไฟล์ .env:
3. ปรับแต่ง API Endpoints (สำคัญ!)
⚠️ สำคัญมาก: ไฟล์ src/postizClient.ts ใช้ PLACEHOLDER endpoints
คุณต้องแก้ไข endpoints ให้ตรงกับ Postiz API จริงของคุณ:
GET /v1/posts→ แก้เป็น endpoint จริงสำหรับดึงรายการโพสต์GET /v1/media→ แก้เป็น endpoint จริงสำหรับดึงรายการ mediaDELETE /v1/media/:id→ แก้เป็น endpoint จริงสำหรับลบ media
ตรวจสอบเอกสาร API ของ Postiz และแก้ไขใน src/postizClient.ts
4. ปรับแต่ง Media Field Extraction (สำคัญ!)
ใน src/mediaService.ts ฟังก์ชัน extractMediaIds() ตรวจสอบหลายฟิลด์ที่อาจมี media IDs:
แก้ไขให้ตรงกับฟิลด์ที่ Postiz API ของคุณใช้จริง
5. Build โปรเจกต์
6. เริ่มใช้งาน MCP Server
MCP Tools ที่มีให้ใช้งาน
1. postiz_list_future_protected_media_ids
ดึงรายการ media IDs ที่ห้ามลบ (ถูกใช้ในโพสต์อนาคต)
Input:
Output:
2. postiz_list_all_media
ดึงรายการ media ทั้งหมด
Input:
Output:
3. postiz_find_orphan_media
ค้นหา media ที่ไม่ถูกใช้ในโพสต์อนาคต (orphan media)
Input:
Output:
4. postiz_cleanup_orphan_media
ลบ orphan media (พร้อม dry-run mode)
Input:
Output:
5. postiz_get_media_stats
ดูสถิติการใช้งาน media
Input:
Output:
การใช้งานแนะนำ
ขั้นตอนการเคลียร์ media ที่ปลอดภัย:
ดูสถิติก่อน:
Tool: postiz_get_media_statsทดสอบด้วย dry-run:
Tool: postiz_cleanup_orphan_media Input: { "dryRun": true, "limit": 10 }ตรวจสอบรายการที่จะลบ:
Tool: postiz_find_orphan_media Input: { "limit": 10 }ลบจริง (เริ่มจากจำนวนน้อย):
Tool: postiz_cleanup_orphan_media Input: { "dryRun": false, "limit": 10 }ตรวจสอบผลลัพธ์และทำซ้ำ
Logic การทำงาน
Orphan Media คืออะไร?
Media จะถือว่าเป็น "orphan" (ไม่ถูกใช้งาน) เมื่อ:
ไม่ได้ถูกอ้างอิงในโพสต์ใด ๆ ที่มีสถานะเป็น:
draft(แบบร่าง)scheduled(กำหนดเวลาไว้)queued(อยู่ในคิว)
ยังไม่ถูกลบ (
deleted = falseหรือdeletedAt = null)
ทำไมไม่ใช้วันที่เป็นเกณฑ์?
โปรแกรมนี้ ไม่ได้ใช้วันที่ เป็นเกณฑ์ในการลบ เพราะ:
Media ที่เก่าแต่ยังถูกใช้ในโพสต์ scheduled ไว้ → ไม่ลบ
Media ที่ใหม่แต่ไม่ถูกใช้ในโพสต์ใด ๆ → ลบได้
วิธีนี้ปลอดภัยกว่าและแม่นยำกว่าการใช้วันที่
การ Config MCP Client
เพิ่ม server นี้ใน MCP client configuration (เช่น Claude Desktop):
Development
Build และ Watch Mode
ทดสอบ
ตรวจสอบว่า TypeScript compile ผ่าน:
npm run buildทดสอบรัน server:
npm startทดสอบเชื่อมต่อกับ MCP client
Error Handling
ทุก API call มี try-catch และ error logging
การลบ media ที่ล้มเหลวจะถูกบันทึกใน
failedIdsไม่ทำให้กระบวนการทั้งหมดหยุดAxios interceptor จัดการ HTTP errors โดยอัตโนมัติ
คำเตือนและข้อควรระวัง
⚠️ สำคัญมาก:
ทดสอบด้วย
สำรองข้อมูลก่อนรัน cleanup ครั้งแรก
ตรวจสอบ endpoint URLs ให้ถูกต้อง - ตัวอย่างใน code เป็น placeholder เท่านั้น
ตรวจสอบฟิลด์ media ให้ตรงกับ API - แก้
extractMediaIds()ให้เหมาะสมเริ่มต้นด้วย เพื่อทดสอบการทำงาน
License
MIT
ผู้พัฒนา
สร้างด้วย TypeScript + MCP SDK สำหรับจัดการ media ใน Postiz อย่างมีประสิทธิภาพ