Plugins › MCP (ผู้ช่วย AI)
เริ่มต้น
เนื้อหา
Plugins
การดูแลระบบ
การ Deploy
สูตรสำเร็จ
MCP
หน้านี้สอนอะไร
การให้ผู้ช่วย AI เช่น Claude, Cursor หรือ VS Code อ่านและเขียนเนื้อหาผ่าน Model Context Protocol โดยใช้ API key ที่จำกัดว่าทำอะไรได้บ้าง
ทดลอง (experimental)
plugin นี้อยู่ในขั้นทดลอง ใช้เลขเวอร์ชันเดียวกับ Easy CMS ส่วนอื่น แต่ option, endpoint และข้อมูลยังอาจเปลี่ยนใน minor release ได้ แม้หลัง 1.0 เพราะไม่อยู่ใต้สัญญาความเสถียร changelog และ คู่มืออัปเกรด จะบอกว่าเปลี่ยนอะไร
@easy-cms/plugin-mcp ทำให้ CMS ของคุณเป็น MCP server ผู้ช่วยที่เชื่อมต่อจะค้นหาบทความ ร่างบทความใหม่
แก้คำผิดหลายหน้า หรืออัปโหลดรูปได้ แต่ทำได้เฉพาะ collection และการกระทำที่ API key อนุญาต ทุกอย่างที่เขียนผ่านการตรวจข้อมูล
hook และกฎสิทธิ์ชุดเดียวกับหน้า admin
ติดตั้ง
npm install @easy-cms/plugin-mcppnpm add @easy-cms/plugin-mcpyarn add @easy-cms/plugin-mcpbun add @easy-cms/plugin-mcpimport { mcpPlugin } from '@easy-cms/plugin-mcp'
export default defineConfig({
// …
apiKeys: true,
plugins: [mcpPlugin()],
})server อยู่ที่ <routes.api>/mcp เช่น https://example.com/api/cms/mcp ใช้ Streamable HTTP แบบไม่เก็บ session
จึงใช้บน hosting แบบ serverless ได้
จากนั้นสร้าง API key ให้ผู้ช่วยที่ ตั้งค่า → API keys และติ๊กเท่าที่จำเป็น เช่น ผู้ช่วยเขียนบทความ: อ่าน สร้าง และแก้ไขบทความได้ แต่เผยแพร่และลบไม่ได้
เชื่อมต่อผู้ช่วย
เปลี่ยน URL และ key เป็นของคุณ
claude mcp add --transport http easy-cms https://example.com/api/cms/mcp \
--header "Authorization: Bearer ecms_…"{
"mcpServers": {
"easy-cms": {
"url": "https://example.com/api/cms/mcp",
"headers": { "Authorization": "Bearer ecms_…" }
}
}
}{
"servers": {
"easy-cms": {
"type": "http",
"url": "https://example.com/api/cms/mcp",
"headers": { "Authorization": "Bearer ${input:easy-cms-key}" }
}
},
"inputs": [{ "id": "easy-cms-key", "type": "promptString", "description": "Easy CMS API key", "password": true }]
}{
"mcpServers": {
"easy-cms": {
"command": "npx",
"args": ["mcp-remote", "https://example.com/api/cms/mcp", "--header", "Authorization: Bearer ${EASY_CMS_KEY}"],
"env": { "EASY_CMS_KEY": "ecms_…" }
}
}
}ผู้ช่วยแต่ละตัวเปลี่ยนวิธีตั้งค่าบ่อย ให้ดูเอกสารของโปรแกรมว่าเพิ่ม MCP server แบบ remote พร้อม header อย่างไร
Claude Desktop (ทดสอบเมื่อตุลาคม 2026): เปิดไฟล์จาก Settings → Developer → Edit Config แต่ให้แก้ตอนที่ปิด
Claude แล้ว (⌘Q) ถ้าแก้ตอนที่ Claude เปิดอยู่ ค่าอาจถูกเขียนทับและ server จะไม่ขึ้น เมื่อเปิด Claude ใหม่ หน้าเดียวกันจะแสดง
easy-cms เป็น running ถ้าขึ้น "Server disconnected" และใน log (~/Library/Logs/Claude/mcp-server-easy-cms.log
บน macOS) มี ECONNREFUSED แปลว่าต่อ CMS ที่ URL นั้นไม่ได้ ในแอป Claude สำหรับเดสก์ท็อป server ที่เพิ่มแบบนี้ใช้ได้ใน
session ของ Claude Code ด้วย
Tool
tool ถูกสร้างตาม collection และ global และมีเฉพาะที่ key อนุญาต:
| Tool | ต้องมีสิทธิ์ | |
|---|---|---|
find_<collection> | อ่าน | ดูรายการด้วย where, sort, limit (≤ 100), page, locale รวมฉบับร่าง |
get_<collection> | อ่าน | เอกสารเดียวตาม id พร้อม relationship |
create_<collection> | สร้าง | สร้างเอกสาร schema ของ input มาจาก field ของคุณ |
update_<collection> | แก้ไข | แก้ field ที่ส่งมา |
delete_<collection> | ลบ | ลบเอกสาร |
publish_<collection>, unpublish_<collection> | เผยแพร่ | collection ที่มี drafts |
schedule_<collection> | เผยแพร่ | เผยแพร่หรือยกเลิกภายหลัง (collection ที่มี schedule) |
upload_media | สร้างใน Media | ไฟล์แบบ base64 พร้อมข้อความแทนรูป |
get_global_<slug>, update_global_<slug>, publish_global_<slug> | อ่าน แก้ไข เผยแพร่ | Global |
- ฉบับร่างยังเป็นฉบับร่าง ใน collection ที่มี drafts
create_และupdate_จะบันทึกเป็นฉบับร่างเสมอ ไม่ว่าผู้ช่วยจะส่งอะไรมา มีแต่publish_ที่ทำให้ขึ้นเว็บ ถ้ามีversionsด้วย หน้าที่เผยแพร่อยู่จะไม่เปลี่ยนจนกว่าจะเผยแพร่ (ถ้าไม่มี versions การแก้เอกสารที่เผยแพร่แล้วเป็นฉบับร่างจะทำให้หน้านั้นออฟไลน์จนกว่าจะเผยแพร่อีกครั้ง เหมือนในหน้า admin และคำอธิบายของ tool บอกผู้ช่วยไว้แล้ว) - Rich text รับข้อความธรรมดา (บรรทัดว่างคือย่อหน้าใหม่) หรือ JSON ของ Tiptap
- Relationship และ upload รับ id ผู้ช่วยหา id ได้ด้วย
find_หรือupload_media - field หลายภาษา อ่านและเขียนตาม
locale(ถ้าไม่ระบุคือภาษาเริ่มต้น) - ไม่มี tool สำหรับผู้ใช้และ API key ไม่ว่า key จะติ๊กอะไรไว้
- error จะกลับมาเป็นข้อความที่ผู้ช่วยนำไปแก้ได้ เช่น
Invalid data: title: is required
ตัวเลือก
| ตัวเลือก | ค่าเริ่มต้น | |
|---|---|---|
path | /mcp | ตำแหน่งของ server ใต้ routes.api |
name | easy-cms | ชื่อ server ที่ผู้ช่วยเห็น |
instructions | — | คำแนะนำเพิ่มสำหรับผู้ช่วย เช่น สไตล์การเขียนของคุณ ต่อท้ายคำแนะนำในตัว |
collections | ทั้งหมด | collection ที่เปิดให้เลย (key ยังเป็นคนตัดสิน) |
globals | ทั้งหมด | global ที่เปิดให้เลย |
mcpPlugin({
name: 'acme-blog',
instructions: 'เขียนด้วยภาษาทางการ บทความต้องมีคำโปรยหนึ่งประโยค',
collections: ['posts', 'categories', 'media'],
})ความปลอดภัย
- ให้ผู้ช่วยแต่ละตัวมี key ของตัวเอง ที่มีสิทธิ์น้อยที่สุดและมีวันหมดอายุ อย่าให้สิทธิ์เผยแพร่และลบ เว้นแต่ต้องการให้ผู้ช่วยทำเอง
- อ่านสิ่งที่ผู้ช่วยร่างไว้ในหน้า admin ก่อนเผยแพร่ ประวัติเก็บทุกเวอร์ชันไว้
- server ไม่ดาวน์โหลด URL ที่ผู้ช่วยส่งมา การอัปโหลดต้องส่งเนื้อไฟล์มาเอง
- เพิกถอน key ที่ ตั้งค่า → API keys เพื่อตัดการเข้าถึงของผู้ช่วยทันที
ขั้นต่อไป
- API keys: สิทธิ์ วันหมดอายุ และการเพิกถอน
- การควบคุมสิทธิ์: กฎที่ใช้กับผู้ช่วยด้วย