ZenML

ทางการ

โต้ตอบกับไปป์ไลน์ MLOps และ LLMOps ของคุณผ่านเซิร์ฟเวอร์ ZenML MCP

GitHub
49
ลองใช้ MCP นี้ผู้สนับสนุน

คุณทำอะไรได้บ้างด้วย ZenML MCP?

  • ตรวจสอบทรัพยากร ZenML — ขอให้แสดงรายการหรืออธิบายไปป์ไลน์ สแตก โมเดล หรือการปรับใช้ผ่าน zenml_list_resources และ zenml_describe_resources
  • ทริกเกอร์การรันไปป์ไลน์ — ขอการรันใหม่จากสแนปช็อตหรือเทมเพลตโดยใช้ trigger_pipeline พร้อมชื่อหรือ ID
  • ดึงข้อมูลรายละเอียดและล็อกการรัน — ดึงล็อกขั้นตอน ล็อกการปรับใช้ หรือโค้ดขั้นตอนด้วย get_step_logs, get_deployment_logs หรือ get_step_code
  • วินิจฉัยปัญหาการตั้งค่า — รัน diagnose_zenml_setup เพื่อแก้ไขปัญหาการเชื่อมต่อเซิร์ฟเวอร์หรือการกำหนดค่า
  • เปิดแดชบอร์ดแบบโต้ตอบ — เปิดแดชบอร์ดการรันไปป์ไลน์หรือแผนภูมิกิจกรรมผ่าน open_pipeline_run_dashboard หรือ open_run_activity_chart
  • จัดการทรัพยากรอย่างปลอดภัย — สร้าง อัปเดต หรือลบทรัพยากร เช่น โปรเจกต์หรือสแตก โดยใช้ zenml_create_resource, zenml_update_resource หรือ zenml_delete_resource

เอกสาร

MCP Server สำหรับ ZenML

Trust Score

โปรเจกต์นี้เป็นการใช้งาน Model Context Protocol (MCP) server สำหรับการโต้ตอบกับ ZenML API

ZenML MCP Server

MCP คืออะไร?

Model Context Protocol (MCP) เป็นโปรโตคอลเปิดที่กำหนดมาตรฐานวิธีการที่ แอปพลิเคชันใช้ในการส่งมอบบริบทให้กับ Large Language Models (LLMs) มันทำหน้าที่เหมือน "พอร์ต USB-C สำหรับแอปพลิเคชัน AI" — โดยเป็นวิธีมาตรฐานในการเชื่อมต่อโมเดล AI เข้ากับแหล่งข้อมูลและเครื่องมือต่างๆ

MCP ใช้สถาปัตยกรรมแบบ client-server โดยที่:

  • MCP Hosts: โปรแกรมเช่น Claude Desktop หรือ IDE ที่ต้องการเข้าถึงข้อมูลผ่าน MCP
  • MCP Clients: โปรโตคอล clients ที่รักษาการเชื่อมต่อแบบ 1:1 กับ servers
  • MCP Servers: โปรแกรมน้ำหนักเบาที่เปิดเผยความสามารถเฉพาะผ่านโปรโตคอลมาตรฐาน
  • Local Data Sources: ไฟล์ ฐานข้อมูล และบริการบนคอมพิวเตอร์ของคุณที่ MCP servers สามารถเข้าถึงได้อย่างปลอดภัย
  • Remote Services: ระบบภายนอกที่เข้าถึงได้ผ่านอินเทอร์เน็ตซึ่ง MCP servers สามารถเชื่อมต่อได้

ZenML คืออะไร?

ZenML เป็นแพลตฟอร์มโอเพนซอร์สสำหรับการสร้างและจัดการ ML และ AI pipelines มันมีอินเทอร์เฟซแบบรวมศูนย์สำหรับการจัดการข้อมูล โมเดล และการทดลอง

สำหรับข้อมูลเพิ่มเติม ดูได้ที่ เว็บไซต์ ZenML และ เอกสารประกอบของเรา

คุณสมบัติ

เซิร์ฟเวอร์มีเครื่องมือ MCP สำหรับเข้าถึงฟังก์ชันการอ่านหลักจาก ZenML server โดยให้วิธีรับข้อมูลสดเกี่ยวกับ:

เอนทิตีหลัก

  • Users - บัญชีผู้ใช้และสิทธิ์การเข้าถึง
  • Stacks - การกำหนดค่าโครงสร้างพื้นฐาน
  • Stack Components - ส่วนประกอบพื้นฐานของ stack
  • Flavors - ประเภทคอมโพเนนต์ที่มีให้ใช้งาน
  • Service Connectors - การรับรองความถูกต้องของคลาวด์

การดำเนินการ Pipeline

  • Pipelines - คำจำกัดความของ pipeline
  • Pipeline Runs - ประวัติการดำเนินการและสถานะ
  • Pipeline Steps - รายละเอียดขั้นตอน โค้ด และบันทึก
  • Schedules - ตารางการทำงานอัตโนมัติ
  • Artifacts - ข้อมูลเมตาเกี่ยวกับ data artifacts (ไม่ใช่ข้อมูลเอง)

การปรับใช้และการให้บริการ

  • Snapshots - การกำหนดค่า pipeline ที่ถูกแช่แข็ง (artifact ของ "สิ่งที่จะรัน/ให้บริการ")
  • Deployments - อินสแตนซ์การให้บริการรันไทม์พร้อมสถานะ URL และบันทึก
  • Services - เอนด์พอยต์การให้บริการโมเดล

การจัดระเบียบและการค้นพบ

  • Projects - คอนเทนเนอร์องค์กรสำหรับทรัพยากร ZenML
  • Tags - ป้ายกำกับข้อมูลเมตาสำหรับการค้นพบ
  • Builds - build artifacts ของ pipeline พร้อมข้อมูลอิมเมจและโค้ด

โมเดล

  • Models - รายการทะเบียนโมเดล ML
  • Model Versions - เวอร์ชันของโมเดล artifacts

Compatibility APIs (แนะนำให้ย้ายไปใช้ใหม่)

  • Pipeline run templates ยังคงใช้งานได้ใน ZenML 0.97.0 ในขณะที่ Snapshots เป็นที่ต้องการสำหรับเวิร์กโฟลว์ใหม่ (ดู คู่มือการย้ายระบบ)

เซิร์ฟเวอร์ยังให้คุณ ทริกเกอร์การรัน pipeline ใหม่ โดยใช้ snapshots (แนะนำ) หรือพารามิเตอร์การทริกเกอร์แบบ template ที่เลิกใช้งานแล้ว

หมายเหตุ: เราปรับปรุงการผสานรวมนี้อย่างต่อเนื่องตามความคิดเห็นของผู้ใช้ กรุณาเข้าร่วม ชุมชน Slack ของเราเพื่อแบ่งปันประสบการณ์ของคุณ และช่วยให้เราทำให้ดียิ่งขึ้น!

โปรไฟล์เครื่องมือและนโยบายการเขียน

โปรไฟล์ compact เริ่มต้นประกาศเครื่องมือ 16 รายการ เครื่องมือทั่วไปเจ็ดรายการครอบคลุม แคตตาล็อกทรัพยากร การอ่าน การกลายพันธุ์ทั่วไป และการดำเนินการวงจรชีวิตแบบจำกัด:

เครื่องมือวัตถุประสงค์
zenml_describe_resourcesค้นพบประเภททรัพยากรที่รองรับและ schema การดำเนินการแบบมีขอบเขต
zenml_list_resourcesแสดงรายการทรัพยากรหนึ่งประเภทพร้อมตัวกรองและการแบ่งหน้าที่ยืนยันแล้ว
zenml_get_resourceรับทรัพยากรหนึ่งรายการ พร้อมขอบเขต parent และ project ตามที่ต้องการ
zenml_create_resourceสร้างทรัพยากรที่รองรับจาก payload ที่มีประเภท
zenml_update_resourceอัปเดต UUID ทรัพยากรที่แน่นอนหนึ่งรายการ
zenml_delete_resourceลบหรือเก็บถาวร UUID ทรัพยากรที่แน่นอนหนึ่งรายการ
zenml_action_resourceรันการดำเนินการวงจรชีวิตหรือความสัมพันธ์ที่อยู่ในรายการอนุญาตโดยไม่ลองใหม่

เครื่องมือเฉพาะเก้ารายการยังคงอยู่เนื่องจากให้การวินิจฉัย บริบทที่ใช้งานอยู่ บันทึกหรือโค้ดแบบสตรีม การดำเนินการ pipeline หรือแอปแบบโต้ตอบ:

  • diagnose_zenml_setup
  • get_active_user และ get_active_project
  • trigger_pipeline
  • get_step_logs, get_step_code, และ get_deployment_logs
  • open_pipeline_run_dashboard และ open_run_activity_chart

get_step_logs ส่งคืนสูงสุด 50,000 รายการ เรียงจากเก่าไปใหม่ พร้อม แฟล็ก possibly_truncated รวมถึง note ที่ระบุว่ารายการใดหายไปและ เพราะเหตุใด ส่ง tail เพื่อรับเฉพาะรายการใหม่ที่สุด บนเซิร์ฟเวอร์ ZenML 0.97+ มันแบ่งหน้าผ่าน log store; บน 0.96 มันใช้เอนด์พอยต์คำขอเดียวแบบเก่า

ใช้ ZENML_MCP_PROFILE=legacy เมื่อ client ที่มีอยู่ยังคงพึ่งพาชื่อเฉพาะเอนทิตีแบบเก่า เช่น list_pipeline_runs สิ่งนี้คงรักษาชื่อเครื่องมือที่มีลักษณะเฉพาะและ เลเยอร์ความเข้ากันได้ของ schema สำหรับ ZenML 0.97.0 มัน ไม่เพิ่มการรองรับสำหรับ ZenML server เวอร์ชันเก่า ใช้เฉพาะเมื่อ ย้ายระบบ: รูปแบบการตอบสนองแบบเดิมอาจเปิดเผยข้อมูลเมตาการดำเนินงานมากกว่า เครื่องมือขนาดกะทัดรัด แม้ว่าเซิร์ฟเวอร์จะละเว้นการกำหนดค่าที่มีข้อมูลรับรองและ ฟิลด์ที่ละเอียดอ่อนอื่นๆ จากทั้งสองโปรไฟล์

การลงทะเบียนและการเข้าถึงการเขียนเป็นอิสระต่อกัน:

โปรไฟล์นโยบายเครื่องมือที่ประกาศ
compactread_write16
compactread_only11
legacyread_write57
legacyread_only52

ตั้งค่า ZENML_MCP_WRITE_POLICY=read_only เพื่อลบเครื่องมือการกลายพันธุ์ทั่วไปทั้งสี่รายการ และ trigger_pipeline จากการค้นพบและการจัดส่ง MCP การค้นพบทรัพยากรยัง ละเว้น schema การสร้าง การอัปเดต การลบ และการดำเนินการ การตั้งค่า ZENML_MCP_READ_ONLY=true แบบเก่ายังคงยอมรับ; ค่านโยบายที่ไม่ถูกต้อง ล้มเหลวแบบปิดไปยังโหมดอ่านอย่างเดียว ZENML_MCP_PROFILE ที่ไม่ถูกต้อง หยุดการเริ่มต้นด้วยข้อผิดพลาดการกำหนดค่า

เวอร์ชัน 2.0.0 ต้องการ MCP Python SDK 2.2.0 และ ZenML 0.96.4 โปรไฟล์ขนาดกะทัดรัด เป็นค่าเริ่มต้นใหม่และเป็นการเปลี่ยนแปลงการค้นพบที่ทำลายความเข้ากันได้สำหรับ client ที่เรียกชื่อเครื่องมือเฉพาะเอนทิตี ตั้งค่า ZENML_MCP_PROFILE=legacy ขณะย้ายระบบ client เหล่านั้น จากนั้นย้ายการเรียกแต่ละรายการไปยังเครื่องมือทรัพยากรทั่วไป

ผลลัพธ์การกลายพันธุ์แยกแยะผลลัพธ์ completed, accepted, และ unknown เซิร์ฟเวอร์ไม่ลองการกลายพันธุ์ซ้ำหลังจากที่อาจไปถึง ZenML แล้ว สำหรับ ผลลัพธ์ที่ยอมรับหรือไม่ทราบ ให้ปฏิบัติตามคำแนะนำการประสานงานใน การตอบสนองก่อนตัดสินใจว่าจะเรียกอีกครั้งหรือไม่ ใช้การอ่านที่มีชื่อเมื่อมี การสร้าง webhook และการหมุนเวียนความลับสามารถส่งคืน signing secret ใหม่ เพียงครั้งเดียว; การอ่านครั้งหลังละเว้นมัน schema การลบระบุ ว่าการดำเนินการเก็บถาวรข้อมูลเมตา ลบข้อมูลเมตา ยกเลิกการจัดเตรียมทรัพยากรสด หรือสามารถลบข้อมูล artifact ที่เก็บไว้

การเผยแพร่ 2.0 ครั้งแรกครอบคลุมการดำเนินการทั่วไปสำหรับโปรเจกต์ stack และ คอมโพเนนต์ flavor บริการ pipeline และการรัน snapshot และ template การปรับใช้ artifact และเวอร์ชัน โมเดลและเวอร์ชัน แท็ก ตัวเชื่อมต่อ ที่เก็บโค้ด webhook ทริกเกอร์ เงื่อนไขการรอ และการเรียก hook ผู้ใช้ ตารางเวลา ประเภทตัวเชื่อมต่อบริการ ความลับ และคำขอทรัพยากรมี ความครอบคลุมแบบอ่านอย่างเดียวตามที่แสดงโดย zenml_describe_resources มันไม่รวม การดูแลระนาบควบคุม ZenML Cloud การดูแล Resource Manager การดูแลผู้ใช้และ ข้อมูลรับรอง secret-value CRUD การเข้าสู่ระบบและการยืนยันตัวเชื่อมต่อ เหตุการณ์ webhook ดิบ และเครื่องมือการดีบักหรือ lineage แบบรวม

เริ่มเวิร์กโฟลว์ทั่วไปโดยการค้นพบ schema ที่แม่นยำ จากนั้นเรียกมัน:

zenml_describe_resources(resource_type="pipeline_run", operation="list")
zenml_list_resources(
    resource_type="pipeline_run",
    filters={"status": "completed", "sort_by": "desc:created"},
    page=1,
    size=10,
)

Prompts และ resources ยังคงมีอยู่ในทั้งสองโปรไฟล์ prompts การวิเคราะห์ เอนด์พอยต์ schema ทรัพยากรแบบมีขอบเขต และ most_recent_runs เป็น MCP prompts หรือ resources มากกว่าเครื่องมือ

ความเข้ากันได้ของ Run-template

ZenML 0.97.0 ยังคงรักษา run-template CRUD APIs ไว้ Snapshots เป็นที่ต้องการสำหรับ เวิร์กโฟลว์ใหม่ การสร้าง pipeline แบบสะดวกและพารามิเตอร์การทริกเกอร์แบบ template เลิกใช้งานแล้ว ในโปรไฟล์แบบเดิม get_run_template และ list_run_templates ยังคงมีให้สำหรับ client ที่มีอยู่

อินพุต tag แบบเดิมยังคงอยู่ใน list_run_templates เพื่อความเข้ากันได้ของ schema แต่ ZenML 0.97.0 ไม่มีตัวกรองฝั่งเซิร์ฟเวอร์ที่เทียบเท่า ค่าที่ไม่ใช่ null ถูกปฏิเสธก่อนการเรียก SDK การกรองแท็ก snapshot ยังคงมีให้

การย้ายระบบ: Run Templates → Snapshots

ทำไมต้องเปลี่ยน? Snapshots แทนที่ run templates เป็น artifact pipeline ที่รันได้ ที่ต้องการของ ZenML SDK 0.97.0 ยังคงรองรับ run-template CRUD ในขณะที่โค้ดใหม่ควรใช้ snapshots

คู่มือการย้ายระบบอย่างย่อ

รูปแบบเดิม (Templates)รูปแบบขนาดกะทัดรัด (Snapshots)
list_run_templates()zenml_list_resources(resource_type="snapshot", filters={"runnable": true, "named_only": true})
get_run_template(name)zenml_get_resource(resource_type="snapshot", resource_id=id)
trigger_pipeline(template_id=...)trigger_pipeline(snapshot_name_or_id=...)

ตัวอย่างเวิร์กโฟลว์ (Snapshot-First)

1. Discover project context:
   → get_active_project()

2. Find runnable snapshots:
   → zenml_list_resources(resource_type="snapshot", filters={"runnable": true, "named_only": true})

3. Trigger a run:
   → trigger_pipeline(snapshot_name_or_id="my-snapshot")

4. Check deployments:
   → zenml_list_resources(resource_type="deployment", filters={"status": "running"})
   → get_deployment_logs(name_id_or_prefix="my-deployment", tail=100)

หมายเหตุ: get_deployment_logs ส่งคืนเอาต์พุตแบบมีขอบเขต (ค่าเริ่มต้น 100 บรรทัด สูงสุด 1000 จำกัดที่ 100KB) และต้องการการติดตั้งการผสานรวม deployer ที่เหมาะสม

การตั้งค่าด่วนผ่าน Dashboard (แนะนำ)

วิธีที่ง่ายที่สุดในการตั้งค่า ZenML MCP Server คือผ่านหน้า MCP Settings ใน ZenML dashboard ของคุณ

MCP Settings Page

ไปที่ Settings → MCP ใน ZenML dashboard ของคุณเพื่อรับ:

  • ตัวอย่างที่กำหนดค่าไว้ล่วงหน้า สำหรับ URL และข้อมูลรับรองเซิร์ฟเวอร์เฉพาะของคุณ
  • การติดตั้งด้วยคลิกเดียว ผ่าน deep links สำหรับ IDE ที่รองรับ
  • การกำหนดค่าแบบคัดลอกและวาง สำหรับ VS Code, Claude Desktop, Cursor, Claude Code, OpenAI Codex และอื่นๆ
  • ตัวเลือก Docker และ uv ตามความต้องการของคุณ

ผู้ใช้ ZenML Pro

หน้า MCP Settings ให้คุณสร้าง Personal Access Token (PAT) ด้วยคลิกเดียว โทเค็นจะถูกรวมโดยอัตโนมัติในตัวอย่างการกำหนดค่าที่สร้างทั้งหมด

ผู้ใช้ ZenML OSS

  1. สร้าง service account token ก่อนผ่าน Settings → Service Accounts
  2. วางโทเค็นลงในหน้า MCP Settings
  3. คัดลอกการกำหนดค่าที่สร้างขึ้นสำหรับ IDE ของคุณ

ต้องการตั้งค่าด้วยตนเองหรือไม่? ดูคำแนะนำโดยละเอียดด้านล่าง

MCP Apps (ทดลอง)

MCP Apps คืออะไร? MCP Apps เป็น HTML UIs แบบโต้ตอบที่ MCP servers สามารถ ให้บริการโดยตรงใน AI clients พวกมันแสดงผลใน sandboxed iframes และสามารถเรียก เครื่องมือเซิร์ฟเวอร์แบบสองทิศทาง ดู ประกาศอย่างเป็นทางการ สำหรับรายละเอียดทั้งหมด

Run Activity Chart

เซิร์ฟเวอร์นี้รวม MCP Apps แบบทดลองสองรายการ:

แอปเครื่องมือคำอธิบาย
Pipeline Runs Dashboardopen_pipeline_run_dashboardตารางโต้ตอบของการรัน pipeline ล่าสุดพร้อมสถานะ รายละเอียดขั้นตอน และบันทึก
Run Activity Chartopen_run_activity_chartแผนภูมิแท่งของกิจกรรมการรัน pipeline ในช่วง 30 วันที่ผ่านมาพร้อมการแบ่งสถานะ

Pipeline Runs Dashboard

แอปเหล่านี้รวมเป็นตัวอย่าง proof-of-concept เรายินดีรับความคิดเห็นและการมีส่วนร่วมสำหรับ MCP Apps เพิ่มเติม มันยังเป็นช่วงแรกๆ สำหรับคุณสมบัติใหม่นี้ ดังนั้นเราจะต้องดูว่ามันจะพัฒนาไปอย่างไร เราคาดหวังที่จะรองรับมันอย่างเต็มที่มากขึ้นในอนาคต

Clients ที่รองรับ

MCP Apps ต้องการ Streamable HTTP transport (ไม่ใช่ stdio) Clients ต่อไปนี้ รองรับ MCP Apps ในปัจจุบัน:

  • ✅ VS Code (Insiders Edition)
  • ✅ Goose
  • ✅ ChatGPT (เปิดตัวเร็วๆ นี้)
  • ⚠️ Claude Desktop -- ณ ปลายเดือนมกราคม 2026 ยังไม่แสดงผล Apps
  • ⚠️ Claude.ai (เว็บ) — ณ ปลายเดือนมกราคม 2026 ยังไม่แสดงผล Apps

หมายเหตุ: เราไม่สามารถทดสอบอย่างละเอียดกับ Claude Desktop หรือ Claude.ai ในเวลาที่เขียน หากคุณพบปัญหา กรุณา รายงาน

การรัน MCP Apps ด้วย Docker

MCP Apps ใช้ Streamable HTTP เก็บพอร์ตคอนเทนเนอร์ที่ผูกกับ loopback และวาง reverse proxy ที่รับรองความถูกต้องหรือบริการเข้าถึงที่คำนึงถึงตัวตนไว้ด้านหน้า ก่อนอนุญาตการเข้าถึงระยะไกล การตรวจสอบ Host และ Origin ป้องกัน DNS rebinding; พวกมันไม่รับรองความถูกต้องของผู้เรียก

1. สร้างและรันคอนเทนเนอร์ Docker:

docker build -t mcp-zenml:apps .

docker run --rm -d --name mcp-zenml-apps -p 127.0.0.1:8001:8001 \
  -e ZENML_STORE_URL="https://your-zenml-server.example.com" \
  -e ZENML_STORE_API_KEY="your-api-key" \
  -e ZENML_MCP_PROFILE="compact" \
  -e ZENML_MCP_WRITE_POLICY="read_write" \
  -e ZENML_ACTIVE_PROJECT_ID="your-project-id" \
  mcp-zenml:apps --transport streamable-http --host 0.0.0.0 --port 8001 \
  --disable-dns-rebinding-protection

2. กำหนดค่าการเข้าถึงระยะไกลที่รับรองความถูกต้อง: สร้าง Cloudflare Tunnel ที่มีชื่อ, Tailscale Funnel พร้อมการควบคุมการเข้าถึง หรือ reverse proxy ที่ผ่านการรับรองความถูกต้องที่เทียบเท่า ชี้ต้นทางส่วนตัวไปที่ http://127.0.0.1:8001 กำหนดให้ต้องมีข้อมูลประจำตัวหรือข้อมูลรับรองบริการสำหรับโฮสต์เนมสาธารณะ และส่งต่อเฉพาะคำขอที่ผ่านการรับรองความถูกต้องไปยังต้นทางเท่านั้น กำหนดค่า MCP client ของคุณให้ใช้ OAuth flow หรือ authorization headers ที่ผู้ให้บริการรองรับ

ก่อนเพิ่มข้อมูลรับรอง ZenML ลงในคอนเทนเนอร์ ตรวจสอบว่าคำขอที่ไม่ผ่านการรับรองความถูกต้องไม่สามารถเข้าถึง MCP ได้:

curl -i https://mcp.example.com/mcp

การตอบสนองต้องเป็น 401, 403 หรือการเปลี่ยนเส้นทางการเข้าสู่ระบบของผู้ให้บริการเข้าถึง การตอบสนองแบบ JSON-RPC หรือ MCP หมายความว่าเส้นรอบวงเปิดอยู่และต้องแก้ไขก่อน

3. เชื่อมต่อ client ที่ผ่านการรับรองความถูกต้องของคุณ:

{
	"servers": {
		"ZenML": {
			"url": "https://mcp.example.com/mcp",
			"type": "http"
		}
	},
	"inputs": []
}
  • ถาม AI ว่า "เปิดแดชบอร์ด pipeline runs" หรือ "แสดงแผนภูมิกิจกรรมการรัน"

หมายเหตุสำคัญ:

  • ต้องมี ZENML_ACTIVE_PROJECT_ID — หากไม่มี เครื่องมือ pipeline run จะล้มเหลวด้วยข้อความ "No project is currently set as active"
  • --disable-dns-rebinding-protection เหมาะสมเฉพาะเมื่อ proxy ที่ผ่านการรับรองความถูกต้องตรวจสอบโฮสต์สาธารณะและพอร์ตคอนเทนเนอร์ยังคงเป็น loopback-only เท่านั้น
  • จำกัดสิทธิ์ของ ZenML API key เฉพาะที่ MCP client ต้องการ ใช้ ZENML_MCP_WRITE_POLICY=read_only สำหรับ client ที่ตรวจสอบอย่างเดียว

การทดสอบและการประกันคุณภาพ

โปรเจกต์นี้รวมการทดสอบอัตโนมัติเพื่อให้แน่ใจว่า MCP server ยังคงทำงานได้:

  • 🔄 การทดสอบ Smoke อัตโนมัติ: การทดสอบ smoke ที่ครอบคลุมจะทำงานทุก 3 วันผ่าน GitHub Actions
  • 🚨 การสร้าง Issue: การทดสอบที่ล้มเหลวจะสร้าง GitHub issues โดยอัตโนมัติพร้อมข้อมูลการดีบักโดยละเอียด
  • ⚡ CI ที่รวดเร็ว: ใช้ UV พร้อมแคชเพื่อการติดตั้ง dependencies และการทดสอบที่รวดเร็ว
  • 🧪 การทดสอบด้วยตนเอง: คุณสามารถรันการทดสอบ smoke ในเครื่องได้โดยใช้ uv run scripts/test_mcp_server.py server/zenml_server.py

การทดสอบอัตโนมัติตรวจสอบ:

  • การเชื่อมต่อและ handshake ของโปรโตคอล MCP
  • การเริ่มต้นเซิร์ฟเวอร์และการค้นพบเครื่องมือ
  • ฟังก์ชันพื้นฐานของเครื่องมือ (เมื่อเข้าถึง ZenML server ได้)
  • การแจกแจงทรัพยากรและ prompt
  • diagnose_zenml_setup ส่งคืน diagnostics ที่มีโครงสร้างแม้ในสภาพแวดล้อมที่จำกัด

CI ที่ไม่มีข้อมูลรับรองครอบคลุมทุก adapter ผ่านโปรโตคอล MCP CI ของ PR และ release ยังเริ่ม ZenML 0.97.0 OSS server ใหม่บนที่อยู่ loopback และรัน receipts แบบ persisted CRUD และ project-isolation ที่ใช้ชื่อเดียวกัน เซิร์ฟเวอร์ใช้การกำหนดค่าชั่วคราวและฐานข้อมูลที่ถูกลบเมื่อ job ออก ไม่ต้องใช้สภาพแวดล้อมของ repository, self-hosted runner หรือข้อมูลรับรอง ZenML

OSS server ในเครื่องของ ZenML ปิดการรับรองความถูกต้องและ SQL store ไม่รองรับ pipeline replay หรือโครงสร้างพื้นฐานการปรับใช้ภายนอก ดังนั้น receipts ที่จำกัดการเข้าถึงและเปิดใช้คุณสมบัติ trigger, replay, deployment, wait-condition และ resource-request จึงยังคงเป็น opt-in gates แยกต่างหาก ต้องใช้ ZENML_MCP_RESTRICTED_INTEGRATION=1 กับ ZENML_MCP_RESTRICTED_API_KEY หรือ ZENML_MCP_ACTION_INTEGRATION=1 กับ UUID ของ disposable fixture ที่แน่นอนใน ZENML_MCP_ACTION_FIXTURE ตามลำดับ การข้ามแบบ gated ไม่ใช่หลักฐานว่าความสามารถเหล่านั้นผ่าน ผู้ปฏิบัติงานสามารถตั้งค่า ZENML_MCP_REQUIRE_COMPLETE_INTEGRATION=1 เพื่อเปลี่ยน opt-in gate ที่ขาดหายไปเป็นความล้มเหลว การจัดเตรียมโครงสร้างพื้นฐานคลาวด์ไม่เคยเป็นส่วนหนึ่งของการรันการทดสอบเริ่มต้น

การดีบักด้วย MCP Inspector

สำหรับการดีบักแบบโต้ตอบ ใช้ MCP Inspector — เครื่องมือบนเว็บที่ให้คุณทดสอบเครื่องมือ MCP แบบเรียลไทม์:

# Using .env.local (recommended for development)
cp .env.local.example .env.local  # Then edit with your credentials
source .env.local && npx @modelcontextprotocol/inspector \
  -e ZENML_STORE_URL=$ZENML_STORE_URL \
  -e ZENML_STORE_API_KEY=$ZENML_STORE_API_KEY \
  -- uv run server/zenml_server.py

สิ่งนี้จะเปิด UI บนเว็บพร้อมข้อมูลรับรองที่กรอกไว้ล่วงหน้า — เพียงคลิก Connect และใช้แท็บ Tools เพื่อทดสอบเครื่องมือใด ๆ แบบโต้ตอบ

ดู CLAUDE.md สำหรับคำแนะนำการดีบักโดยละเอียดเพิ่มเติม

ความเป็นส่วนตัวและการวิเคราะห์

ZenML MCP Server เก็บรวบรวมข้อมูลการใช้งานแบบไม่ระบุตัวตนเพื่อช่วยให้เราปรับปรุงผลิตภัณฑ์

เราติดตาม:

  • เครื่องมือใดที่ใช้และบ่อยแค่ไหน
  • อัตราและประเภทข้อผิดพลาด (เฉพาะประเภทข้อผิดพลาด ไม่มีข้อความ)
  • ข้อมูลสภาพแวดล้อมพื้นฐาน (OS, เวอร์ชัน Python และการรันใน Docker/CI หรือไม่)
  • ระยะเวลาเซสชันและรูปแบบการใช้งานเครื่องมือ

เราไม่เก็บรวบรวม:

  • URL ของ ZenML server หรือ API key ของคุณ
  • ชื่อ pipeline, ชื่อโมเดล หรือข้อมูลธุรกิจใด ๆ
  • ข้อความแสดงข้อผิดพลาดหรือ stack traces
  • ข้อมูลที่ระบุตัวบุคคลได้ใด ๆ

เพื่อปิดการวิเคราะห์:

# Option 1
export ZENML_MCP_ANALYTICS_ENABLED=false

# Option 2
export ZENML_MCP_DISABLE_ANALYTICS=true

สำหรับการดีบัก/การทดสอบ (บันทึกเหตุการณ์ไปที่ stderr แทนการส่ง):

export ZENML_MCP_ANALYTICS_DEV=true

สำหรับผู้ใช้ Docker: คุณสามารถตั้งค่า ZENML_MCP_ANALYTICS_ID (ต้องเป็น UUID ที่ถูกต้อง) เพื่อรักษา ID ที่ไม่ระบุตัวตนที่สอดคล้องกันข้ามการรีสตาร์ทคอนเทนเนอร์ หากคุณไม่ตั้งค่าและไฟล์ระบบของคอนเทนเนอร์ไม่สามารถเก็บไฟล์ analytics ID ได้ เซิร์ฟเวอร์จะใช้ UUID ที่ไม่ระบุตัวตนแบบกำหนดขึ้นจาก hash ของ ZENML_STORE_URL (URL เองไม่ถูกส่งเป็นคุณสมบัติเหตุการณ์)

ตัวเลือกการวิเคราะห์เพิ่มเติม:

  • ZENML_MCP_ANALYTICS_SHUTDOWN_TIMEOUT_S — เวลาสูงสุด (วินาที) ในการ flush analytics แบบซิงโครนัสระหว่างการปิดระบบ (ค่าเริ่มต้น: 1.0)

หมายเหตุเกี่ยวกับการติดตามการปิดระบบ: เหตุการณ์การปิดระบบจะถูกส่งแบบซิงโครนัสพร้อม timeout ที่จำกัดเพื่อความน่าเชื่อถือในการส่งที่ดีที่สุด อย่างไรก็ตาม หากคอนเทนเนอร์ถูกฆ่าด้วย SIGKILL (เช่น docker kill) ตัวจัดการการปิดระบบไม่สามารถทำงานได้ — นี่เป็นข้อจำกัดของ Docker/OS ไม่ใช่บั๊ก

การตรวจสอบการเริ่มต้น

คุณสามารถเปิดใช้งานการตรวจสอบวินิจฉัยการเริ่มต้นแบบน้ำหนักเบา:

# Print warnings but start normally
uv run server/zenml_server.py --startup-validation warn

# Exit non-zero if required setup is missing (useful in Docker/CI)
uv run server/zenml_server.py --startup-validation strict

คุณยังสามารถตั้งค่านี้ผ่านตัวแปรสภาพแวดล้อม: ZENML_MCP_STARTUP_VALIDATION=warn

เครื่องมือ diagnose_zenml_setup ยังพร้อมใช้งานเป็นเครื่องมือ MCP สำหรับการแก้ไขปัญหาแบบรันไทม์ — ทำงานแม้เมื่อไม่ได้ติดตั้ง ZenML SDK หรือไม่มีตัวแปรสภาพแวดล้อม

การตั้งค่าด้วยตนเอง

ข้อกำหนดเบื้องต้น

คุณจะต้องสามารถเข้าถึง ZenML server ที่ปรับใช้แล้ว หากคุณยังไม่มี คุณสามารถสมัครทดลองใช้ฟรีที่ ZenML Pro และเราจะจัดการการปรับใช้ให้คุณ

เคล็ดลับ: เมื่อคุณมี ZenML server แล้ว ตรวจสอบ หน้า MCP Settings ในแดชบอร์ดของคุณเพื่อประสบการณ์การตั้งค่าที่ง่ายที่สุด

ความเข้ากันได้: เวอร์ชันปัจจุบันทดสอบกับ ZenML 0.97.0 หากคุณรัน ZenML เวอร์ชันเก่ากว่า โปรดใช้ รุ่นก่อนหน้า ของ MCP server นี้

คุณจะต้องติดตั้ง uv ในเครื่องด้วย (อาจจะ) สำหรับข้อมูลเพิ่มเติม ดู เอกสาร uv เราขอแนะนำการติดตั้งผ่านสคริปต์ตัวติดตั้งหรือผ่าน brew หากใช้ Mac (ในทางเทคนิคคุณไม่จำเป็นต้องมี แต่ทำให้การติดตั้งและการตั้งค่าง่าย)

คุณจะต้อง clone repository นี้ในเครื่องที่ใดที่หนึ่ง:

git clone https://github.com/zenml-io/mcp-zenml.git

ไฟล์กำหนดค่า MCP ของคุณ

ไฟล์กำหนดค่า MCP เป็นไฟล์ JSON ที่บอก MCP client วิธีเชื่อมต่อกับ MCP server ของคุณ MCP client ที่แตกต่างกันจะใช้หรือระบุสิ่งนี้แตกต่างกัน MCP client ที่ใช้กันทั่วไปสองตัวคือ Claude Desktop และ Cursor ซึ่งเรามีคำแนะนำการติดตั้งด้านล่าง

คุณจะต้องระบุ ZenML MCP server ของคุณในรูปแบบต่อไปนี้:

{
    "mcpServers": {
        "zenml": {
            "command": "/usr/local/bin/uv",
            "args": ["run", "path/to/server/zenml_server.py"],
            "env": {
                "LOGLEVEL": "WARNING",
                "NO_COLOR": "1",
                "ZENML_LOGGING_COLORS_DISABLED": "true",
                "ZENML_LOGGING_VERBOSITY": "WARN",
                "ZENML_ENABLE_RICH_TRACEBACK": "false",
                "ZENML_MCP_PROFILE": "compact",
                "ZENML_MCP_WRITE_POLICY": "read_write",
                "PYTHONUNBUFFERED": "1",
                "PYTHONIOENCODING": "UTF-8",
                "ZENML_STORE_URL": "https://your-zenml-server-goes-here.com",
                "ZENML_STORE_API_KEY": "your-api-key-here"
            }
        }
    }
}

มีค่าจำลองสี่ค่าที่คุณต้องแทนที่:

  • เส้นทางไปยัง uv ที่ติดตั้งในเครื่องของคุณ (เส้นทางที่ระบุด้านบนคือตำแหน่งบน Mac หากคุณติดตั้งผ่าน brew)
  • เส้นทางไปยังไฟล์ zenml_server.py (นี่คือไฟล์ที่จะรันเมื่อคุณเชื่อมต่อกับ MCP server) ไฟล์นี้อยู่ใน repository นี้ที่ root คุณจะต้องระบุเส้นทางเต็มที่แน่นอนไปยังไฟล์นี้
  • URL ของ ZenML server (นี่คือ URL ของ ZenML server ของคุณ คุณสามารถค้นหาได้ใน ZenML Cloud UI) จะมีลักษณะประมาณ https://d534d987a-zenml.cloudinfra.zenml.io
  • API key ของ ZenML server (นี่คือ API key สำหรับ ZenML server ของคุณ คุณสามารถค้นหาได้ใน ZenML Cloud UI หรือ https://docs.zenml.io/how-to/manage-zenml-server/connecting-to-zenml/connect-with-a-service-account เกี่ยวกับวิธีสร้าง สำหรับวัตถุประสงค์ของ ZenML MCP server เราขอแนะนำให้ใช้ service account)

คุณสามารถเปลี่ยนวิธีรันไฟล์ Python ของ MCP server ได้อย่างอิสระ แต่การใช้ uv อาจเป็นตัวเลือกที่ง่ายที่สุดเนื่องจากจัดการสภาพแวดล้อมและการติดตั้ง dependencies ให้คุณ

การติดตั้งสำหรับใช้กับ Claude Desktop

ทางเลือกที่รวดเร็ว: ใช้หน้า MCP Settings ในแดชบอร์ด ZenML ของคุณ (Settings → MCP) เพื่อรับคำแนะนำการติดตั้งที่กำหนดค่าไว้ล่วงหน้าและ deep links สำหรับ Claude Desktop

คุณจะต้องติดตั้ง Claude Desktop เวอร์ชันล่าสุด

คุณสามารถเปิดเมนู Settings และลากไฟล์ mcp-zenml.mcpb จาก root ของ repository นี้ลงบนเมนูได้ และมันจะแนะนำคุณตลอดกระบวนการติดตั้งและการตั้งค่า คุณจะต้องเพิ่ม URL ของ ZenML server และ API key

หมายเหตุ: MCP bundles (.mcpb) แทนที่รูปแบบ Desktop Extensions (.dxt) ที่เก่ากว่า ไฟล์ .dxt ที่มีอยู่ยังทำงานใน Claude Desktop

ไม่บังคับ: การปรับปรุงการแสดงผลผลลัพธ์เครื่องมือ ZenML

เพื่อประสบการณ์ที่ดีขึ้นกับผลลัพธ์เครื่องมือ ZenML คุณสามารถกำหนดค่า Claude ให้แสดงการตอบสนอง JSON ในรูปแบบที่อ่านง่ายขึ้น ใน Claude Desktop ไปที่ Settings → Profile และในส่วน "What personal preferences should Claude consider in responses?" เพิ่มบางอย่างเช่นต่อไปนี้ (หรือใช้คำเหล่านี้ตรง ๆ!):

When using zenml tools which return JSON strings and you're asked a question, you might want to consider using markdown tables to summarize the results or make them easier to view!

สิ่งนี้จะกระตุ้นให้ Claude จัดรูปแบบผลลัพธ์เครื่องมือ ZenML เป็นตาราง markdown ทำให้ข้อมูลอ่านและเข้าใจง่ายขึ้นมาก

การติดตั้งสำหรับใช้กับ Cursor

ทางเลือกที่รวดเร็ว: หน้า MCP Settings ในแดชบอร์ด ZenML ของคุณ (Settings → MCP) สามารถสร้างเนื้อหา mcp.json ที่แน่นอนพร้อมข้อมูลรับรองที่กรอกไว้ล่วงหน้า

คุณจะต้องติดตั้ง Cursor

Cursor ทำงานแตกต่างจาก Claude Desktop เล็กน้อยตรงที่คุณระบุไฟล์กำหนดค่าต่อ repository ซึ่งหมายความว่าหากคุณต้องการใช้ ZenML MCP server ในหลาย repos คุณจะต้องระบุไฟล์กำหนดค่าในแต่ละ repo

เพื่อตั้งค่าสำหรับ repository เดียว คุณจะต้อง:

  • สร้างโฟลเดอร์ .cursor ใน root ของ repository ของคุณ
  • ภายในนั้น สร้างไฟล์ mcp.json ด้วยเนื้อหาด้านบน
  • ไปที่การตั้งค่า Cursor ของคุณและคลิกที่ ZenML server เพื่อ 'เปิดใช้งาน'

จากประสบการณ์ของเรา บางครั้งมันแสดงตัวบ่งชี้ข้อผิดพลาดสีแดงแม้ว่าจะทำงานอยู่ คุณสามารถลองได้โดยการแชทในหน้าต่างแชทของ Cursor มันจะแจ้งให้คุณทราบว่าสามารถเข้าถึงเครื่องมือ ZenML ได้หรือไม่

Docker Image

คุณสามารถรันเซิร์ฟเวอร์เป็นคอนเทนเนอร์ Docker กระบวนการสื่อสารผ่าน stdio ดังนั้นมันจะรอการเชื่อมต่อ MCP client ส่งข้อมูลรับรอง ZenML ของคุณผ่านตัวแปรสภาพแวดล้อม

ภาพที่สร้างไว้ล่วงหน้า (Docker Hub)

ดึงภาพ multi-arch ล่าสุด:

docker pull zenmldocker/mcp-zenml:latest

รุ่นที่ติดแท็กเวอร์ชันถูกแท็กเป็น X.Y.Z:

docker pull zenmldocker/mcp-zenml:2.0.0

รันด้วยข้อมูลรับรอง ZenML ของคุณ (โหมด stdio):

docker run -i --rm \
  -e ZENML_STORE_URL="https://your-zenml-server.example.com" \
  -e ZENML_STORE_API_KEY="your-api-key" \
  zenmldocker/mcp-zenml:latest

กำหนดค่า MCP มาตรฐานโดยใช้ Docker

{
  "mcpServers": {
    "zenml": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "ZENML_STORE_URL=https://...",
        "-e", "ZENML_STORE_API_KEY=ZENKEY_...",
        "-e", "ZENML_ACTIVE_PROJECT_ID=...",
        "-e", "ZENML_MCP_PROFILE=compact",
        "-e", "ZENML_MCP_WRITE_POLICY=read_write",
        "-e", "LOGLEVEL=WARNING",
        "-e", "NO_COLOR=1",
        "-e", "ZENML_LOGGING_COLORS_DISABLED=true",
        "-e", "ZENML_LOGGING_VERBOSITY=WARN",
        "-e", "ZENML_ENABLE_RICH_TRACEBACK=false",
        "-e", "PYTHONUNBUFFERED=1",
        "-e", "PYTHONIOENCODING=UTF-8",
        "zenmldocker/mcp-zenml:latest"
      ]
    }
  }
}

สร้างในเครื่อง

จาก root ของ repository:

docker build -t zenmldocker/mcp-zenml:local .

รันภาพที่สร้างในเครื่อง:

docker run -i --rm \
  -e ZENML_STORE_URL="https://your-zenml-server.example.com" \
  -e ZENML_STORE_API_KEY="your-api-key" \
  zenmldocker/mcp-zenml:local

MCP Bundles (.mcpb)

โปรเจกต์นี้ใช้ MCP Bundles (.mcpb) — ผู้สืบทอดของ Desktop Extensions (DXT) ของ Anthropic MCP Bundles แพ็คเกจ MCP server ทั้งหมด (รวมถึง dependencies) ลงในไฟล์เดียวพร้อมการกำหนดค่าที่เป็นมิตรกับผู้ใช้

หมายเหตุเกี่ยวกับการเปลี่ยนชื่อ: MCP Bundles แทนที่รูปแบบ .dxt ที่เก่ากว่า Claude Desktop ยังคงเข้ากันได้ย้อนหลังกับไฟล์ .dxt ที่มีอยู่ แต่ตอนนี้เราส่ง mcp-zenml.mcpb และแนะนำให้ใช้ต่อไป

ไฟล์ mcp-zenml.mcpb ใน root ของ repository ใช้ MCPB 0.4 UV runtime โฮสต์ติดตั้ง dependencies Python ที่ปักหมุดสำหรับระบบปฏิบัติการปัจจุบัน ดังนั้น bundle เดียวกันทำงานบน macOS, Windows และ Linux โดยไม่ต้องฝังส่วนขยายเนทีฟเฉพาะแพลตฟอร์ม การติดตั้งต้องเข้าถึงเครือข่ายในครั้งแรกที่ UV แก้ไขสภาพแวดล้อมที่รวมอยู่ใน bundle

การสร้าง bundle ใช้ mcpb-uv.lock ที่คอมมิตแล้วซ้ำและแก้ไขกราฟ dependencies Python ในโหมดออฟไลน์ รายการ dependencies ของ bundle มาจาก [project].dependencies ใน pyproject.toml หลังจากเปลี่ยนรายการนั้น ตั้งค่า MCPB_REFRESH_LOCK=1 เพื่อแก้ไขใหม่แบบออนไลน์ในขณะที่รักษาทุก pin ที่ยังพอดี MCPB_REFRESH_LOCK=upgrade ย้ายทุก pin ไปยังเวอร์ชันใหม่ที่สุด เมื่อคุณลากและวางไฟล์ .mcpb ลงในการตั้งค่าของ Claude Desktop ระบบจะจัดการโดยอัตโนมัติในเรื่อง:

  • การติดตั้ง dependencies ที่จำเป็นสำหรับการทำงาน
  • การจัดการการกำหนดค่าอย่างปลอดภัย
  • ความเข้ากันได้ข้ามแพลตฟอร์ม
  • ขั้นตอนการติดตั้งที่ใช้งานง่าย

สำหรับข้อมูลเพิ่มเติม โปรดดูประกาศของ Anthropic เกี่ยวกับ Desktop Extensions (DXT) และคำแนะนำเกี่ยวกับการจัดทำ MCP bundle ที่เกี่ยวข้องในเอกสารประกอบของพวกเขา: https://www.anthropic.com/engineering/desktop-extensions

เผยแพร่บน Anthropic MCP Registry

MCP server นี้ถูกเผยแพร่บน Anthropic MCP Registry อย่างเป็นทางการ และสามารถค้นพบได้โดย hosts ที่รองรับ ในการเผยแพร่แต่ละครั้งที่มี tag CI ของเราจะอัปเดตรายการใน registry ผ่าน mcp-publisher CLI ของ registry โดยใช้ GitHub OIDC ดังนั้นคุณจึงสามารถติดตั้งหรือค้นพบ ZenML MCP Server ได้โดยตรงทุกที่ที่รองรับ registry (เช่น แคตตาล็อก Extensions ของ Claude Desktop)

  • อัปเดตอยู่เสมอ: รายการใน registry จะถูกรีเฟรชทุกครั้งที่มีการเผยแพร่จาก manifest.json และ server.json ของ commit ที่มี tag
  • เส้นทางการติดตั้งอื่น: คุณยังสามารถติดตั้งในเครื่องผ่าน .mcpb bundle ที่จัดทำไว้ (ดูด้านบน) หรือรัน Docker image ได้

เรียนรู้เพิ่มเติมเกี่ยวกับ registry ได้ที่นี่: