Plane

ทางการ

เซิร์ฟเวอร์ Plane MCP อย่างเป็นทางการให้การผสานรวมกับ Plane APIs ช่วยให้สามารถทำงานอัตโนมัติด้วย AI เต็มรูปแบบสำหรับโปรเจกต์ Plane, รายการงาน, ไซเคิล และอื่นๆ

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

  • สร้างและอัปเดตงาน — ให้ผู้ช่วยของคุณสร้างงาน เช่น "แก้ไขการเข้าสู่ระบบ" หรืออัปเดตสถานะ ความสำคัญ หรือผู้รับผิดชอบผ่านเครื่องมือ workitem
  • สอบถามงานด้วย PQL — ใช้ภาษาคิวรีของ Plane เพื่อแสดงรายการ นับ หรือค้นหางานตามตัวกรอง เช่น state__group = "started" AND priority = "urgent"
  • จัดการ cycles และ modules — เก็บถาวร cycles แสดงรายการ cycles ของโปรเจกต์ หรือดำเนินการอื่นๆ เกี่ยวกับ cycles/modules ผ่านเครื่องมือทรัพยากรรวม
  • จัดการไฟล์แนบจาก URL — เริ่มการอัปโหลดไฟล์แนบจาก URL ภายนอก พร้อมรองรับพร็อกซีสำหรับควบคุม SSRF ผ่าน upload_from_url
  • ดึงข้อมูลอ้างอิงไวยากรณ์ PQL — ขอไวยากรณ์ PQL ฉบับเต็ม ตัวดำเนินการ และตัวอย่างการใช้งานโดยเรียก get_pql_reference

เอกสาร

เซิร์ฟเวอร์ MCP ของ Plane

เซิร์ฟเวอร์ Model Context Protocol สำหรับ Plane ให้เครื่องมือแก่เอเจนต์ AI ในการอ่านและจัดการโปรเจกต์ รายการงาน ไซเคิล โมดูล รีลีส ลูกค้า และอื่น ๆ

สร้างบน FastMCP และ plane-sdk อย่างเป็นทางการ

  • เครื่องมือ 30 รายการ หนึ่งรายการต่อทรัพยากร Plane ครอบคลุมการดำเนินการ 207 รายการ
  • ภายในเครื่องหรือระยะไกล — stdio, streamable HTTP, SSE
  • การรับรองความถูกต้องแบบ OAuth หรือ API key

เริ่มต้นอย่างรวดเร็ว

รับ API key จาก Plane: การตั้งค่าเวิร์กสเปซ → โทเค็น API

เพิ่มสิ่งนี้ในการกำหนดค่าของไคลเอ็นต์ MCP ของคุณ:

{
  "mcpServers": {
    "plane": {
      "command": "uvx",
      "args": ["plane-mcp-server", "stdio"],
      "env": {
        "PLANE_API_KEY": "<your-api-key>",
        "PLANE_WORKSPACE_SLUG": "<your-workspace-slug>"
      }
    }
  }
}

uvx ไม่ต้องมีขั้นตอนการติดตั้ง ต้องใช้ Python 3.10 ขึ้นไป

สำหรับ Plane ที่โฮสต์เอง ให้เพิ่ม "PLANE_BASE_URL": "https://plane.example.com"

การส่งข้อมูล

stdio — ภายในเครื่อง

ทำงานเป็นซับพรอเซสของไคลเอ็นต์ MCP ของคุณ การกำหนดค่าตามที่แสดงด้านบน ต้องใช้ PLANE_API_KEY และ PLANE_WORKSPACE_SLUG

PLANE_API_KEY=... PLANE_WORKSPACE_SLUG=... uvx plane-mcp-server stdio

HTTP พร้อม OAuth — โฮสต์

https://mcp.plane.so/http/mcp

ขั้นตอน OAuth จัดการเมื่อเชื่อมต่อ ไม่ต้องมีข้อมูลรับรองในการกำหนดค่าของคุณ สำหรับไคลเอ็นต์ ที่ไม่รองรับ MCP ระยะไกลโดยกำเนิด ให้เชื่อมต่อกับ mcp-remote:

{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": ["mcp-remote@latest", "https://mcp.plane.so/http/mcp"]
    }
  }
}

ต้องใช้ Node.js 22 ขึ้นไป

HTTP พร้อมโทเค็นการเข้าถึงส่วนบุคคล — โฮสต์

https://mcp.plane.so/http/api-key/mcp

ส่วนหัวค่า
AuthorizationBearer <PAT>
X-Workspace-slug<workspace-slug>
{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": ["mcp-remote@latest", "https://mcp.plane.so/http/api-key/mcp"],
      "headers": {
        "Authorization": "Bearer <PAT>",
        "X-Workspace-slug": "<workspace-slug>"
      }
    }
  }
}

SSE — เลิกใช้งานแล้ว

https://mcp.plane.so/sse ถูกดูแลเพื่อความเข้ากันได้ย้อนหลังเท่านั้น ใช้ การส่งข้อมูลแบบ HTTP แทน

เครื่องมือ

เซิร์ฟเวอร์ประกาศเครื่องมือ 30 รายการ หนึ่งรายการต่อทรัพยากร แต่ละรายการรับพารามิเตอร์ action ที่เลือกการดำเนินการ:

workitem(action="create", project_id=..., name="Fix login")
workitem(action="list", project_id=..., pql='state__group = "started"')
cycle(action="archive", project_id=..., cycle_id=...)

คำอธิบายของทุกเครื่องมือแสดงรายการการดำเนินการพร้อมพารามิเตอร์ที่จำเป็นและไม่บังคับ ดังนั้นแคตตาล็อกจึงอธิบายตัวเองได้ในเวลาที่เรียกใช้

→ เอกสารอ้างอิงเครื่องมือและการดำเนินการฉบับเต็ม

การสอบถามรายการงาน

การแสดงรายการ การนับ และการค้นหายอมรับ PQL ภาษาคิวรีของ Plane:

workitem(action="list", project_id=..., pql='state__group = "started" AND priority = "urgent"')
workitem(action="count", pql='assignees__id = "<member id>"', group_by="state_id")

เรียก get_pql_reference สำหรับไวยากรณ์ฉบับเต็ม ตัวดำเนินการ และตัวอย่างที่ใช้งานได้

การอัปเกรดจากเครื่องมือแบบต่อการดำเนินการ

เวอร์ชันก่อนหน้าเปิดเผยเครื่องมือหนึ่งรายการต่อการดำเนินการ API การผสานรวมที่มีอยู่ยังคงทำงานได้: 169 จาก 177 ชื่อเหล่านั้นยังคงแก้ไขเป็นเครื่องมือรวม ดังนั้น พรอมป์หรือสคริปต์ที่บันทึกไว้ซึ่งเรียก create_work_item หรือ list_cycles ไม่จำเป็นต้อง เปลี่ยนแปลง พวกมันไม่ถูกประกาศอีกต่อไป และยังคงใช้ชื่อพารามิเตอร์ที่มาพร้อมกับ (work_item_id, ไม่ใช่ workitem_id)

เจ็ดชื่อเลือกระหว่างสองการดำเนินการด้วยพารามิเตอร์ (manage_project_archive(archive=False)) ซึ่งคู่เครื่องมือและการดำเนินการหนึ่งคู่ไม่สามารถ สร้างซ้ำได้ การเรียกหนึ่งรายการจะบอกการแทนที่ให้คุณ get_pql_reference ไม่มีการ เปลี่ยนแปลง

การกำหนดค่า

การรับรองความถูกต้อง

ตัวแปรจำเป็นสำหรับวัตถุประสงค์
PLANE_API_KEYstdioAPI key
PLANE_WORKSPACE_SLUGstdioเวิร์กสเปซเป้าหมาย
PLANE_BASE_URLไม่บังคับURL API ของ Plane (ค่าเริ่มต้น https://api.plane.so)

การส่งข้อมูลระยะไกลนำข้อมูลรับรองในการเชื่อมต่อ — ขั้นตอน OAuth หรือ ส่วนหัว PAT — และไม่จำเป็นต้องใช้สิ่งเหล่านี้

พร็อกซีขาออกสำหรับการอัปโหลดไฟล์แนบ

HTTP_PROXY / HTTPS_PROXY / NO_PROXY (และรูปแบบตัวพิมพ์เล็ก) ถูกรองรับ สำหรับการดึงไฟล์แนบจาก URL (upload_from_url) เมื่อพร็อกซี ใช้กับคำขอที่กำหนด พร็อกซี — ไม่ใช่เซิร์ฟเวอร์นี้ — คือการควบคุม SSRF ของคำขอนั้น: เซิร์ฟเวอร์ไม่ได้ปักหมุดหรือตรวจสอบที่อยู่ที่แก้ไขของเป้าหมายเอง เนื่องจากพร็อกซีเชื่อมต่อและแก้ไขเป้าหมายอย่างอิสระ กำหนดขอบเขต NO_PROXY และนโยบายการส่งออกพร็อกซีตามนั้น

การโฮสต์เซิร์ฟเวอร์เอง:

ตัวแปรวัตถุประสงค์
PLANE_INTERNAL_BASE_URLURL ภายในสำหรับการเรียกเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์ ต้องการมากกว่า PLANE_BASE_URL
REDIS_URLการจัดเก็บโทเค็น OAuth เป็น URL การเชื่อมต่อเดียว (redis:// หรือ rediss:// สำหรับ TLS); ชนะโฮสต์/พอร์ต
REDIS_HOST / REDIS_PORTการจัดเก็บโทเค็น OAuth; กลับไปใช้ในหน่วยความจำ
PLANE_OAUTH_PROVIDER_*ข้อมูลรับรองไคลเอ็นต์ OAuth และ URL พื้นฐาน
MCP_PATH_PREFIXคำนำหน้าเส้นทางสำหรับเส้นทาง HTTP เมื่อติดตั้งหลังพร็อกซี — /plane ให้บริการ /plane/http/mcp

URI เปลี่ยนเส้นทาง OAuth

การส่งข้อมูล OAuth ตรวจสอบ URI เปลี่ยนเส้นทางของแต่ละไคลเอ็นต์กับรายการที่อนุญาต ไคลเอ็นต์ทั่วไป (Cursor, VS Code, Claude.ai, ตัวเชื่อมต่อ ChatGPT, localhost) ได้รับ อนุญาตโดยค่าเริ่มต้น

เพื่อเพิ่มไคลเอ็นต์ใหม่โดยไม่ต้องออกเวอร์ชัน ให้ผนวกรูปแบบ:

export PLANE_OAUTH_ALLOWED_REDIRECT_URIS="https://newclient.com/cb,https://other.app/oauth/*"

* ตรงกับพอร์ต ส่วนเส้นทาง หรือซับโดเมนใด ๆ เก็บโฮสต์ให้ปักหมุดและ ใช้ไวลด์การ์ดเฉพาะพอร์ตหรือเส้นทาง

การบันทึก

JSON แบบมีโครงสร้าง การเรียกเครื่องมือแต่ละครั้งบันทึกชื่อ ระยะเวลา สถานะ และ — เมื่อ มี — รหัสผู้ใช้ที่ไม่เปิดเผยและสลักเวิร์กสเปซ

export LOG_USER_INFO=false    # also log the display name (PII);
export LOG_PAYLOADS=false    # keep request payloads out of logs; default true

เฉพาะการส่งข้อมูล OAuth และ PAT เท่านั้นที่มีชื่อที่แสดง stdio ไม่ได้รับผลกระทบ

การพัฒนา

git clone https://github.com/makeplane/plane-mcp-server
cd plane-mcp-server
uv pip install -e ".[dev]"

รันเซิร์ฟเวอร์กับเวิร์กสเปซ:

PLANE_API_KEY=... PLANE_WORKSPACE_SLUG=... python -m plane_mcp stdio
python -m plane_mcp http            # port 8211

การทดสอบ การจัดรูปแบบ การตรวจสอบ:

pytest                              # no network or credentials needed
ruff format plane_mcp/ tests/       # line length 120
ruff check plane_mcp/ tests/        # rules E, F, I, UP, B

ชุดทดสอบทำงานออฟไลน์อย่างสมบูรณ์ — ทุกการดำเนินการของทุกทรัพยากรถูก ดำเนินการกับตัวแทนที่ผูกการเรียกแต่ละครั้งกับลายเซ็น plane-sdk จริง ดู plane_mcp/tools/README.md

การทดสอบการผสานรวมสดถูกข้ามเว้นแต่คุณจะชี้ไปที่เซิร์ฟเวอร์ที่รันอยู่:

export PLANE_TEST_API_KEY=... PLANE_TEST_WORKSPACE_SLUG=...
export PLANE_TEST_MCP_URL=http://localhost:8211    # optional; this is the default
pytest tests/test_integration.py -v

พวกมันเขียนข้อมูลจริงไปยังเวิร์กสเปซนั้น

โครงสร้างพื้นที่เก็บข้อมูล

เส้นทางเนื้อหา
plane_mcp/__main__.pyจุดเข้า; เลือกการส่งข้อมูลจาก argv[1]
plane_mcp/server.pyหนึ่งแฟกทอรีต่อการส่งข้อมูล
plane_mcp/client.pyแก้ไขข้อมูลรับรองเป็นไคลเอ็นต์ plane-sdk
plane_mcp/auth/ผู้ให้บริการ OAuth และการรับรองความถูกต้องส่วนหัว
plane_mcp/tools/พื้นผิวเครื่องมือ: หนึ่งโมดูลต่อทรัพยากร Plane
plane_mcp/toolkit/บล็อกการสร้างที่ใช้ร่วมกันสำหรับพื้นผิวเครื่องมือ
plane_mcp/pql_reference.pyเอกสารอ้างอิงไวยากรณ์ PQL ที่ให้บริการแก่โมเดล

การมีส่วนร่วม

ยินดีต้อนรับคำขอดึง โปรดรัน pytest และ ruff check ก่อนส่ง; เครื่องมือใหม่ ควรมาพร้อมกับค่าคงที่ที่อธิบายใน plane_mcp/tools/README.md

ดู CONTRIBUTING.md และ CODE_OF_CONDUCT.md

การย้ายจากเซิร์ฟเวอร์ Node.js

@makeplane/plane-mcp-server (Node.js) เลิกใช้งานแล้วและไม่ได้รับการดูแล การใช้งาน Python นี้แทนที่

Node.jsPython
PLANE_API_KEYPLANE_API_KEY
PLANE_API_HOST_URLPLANE_BASE_URL
PLANE_WORKSPACE_SLUGPLANE_WORKSPACE_SLUG

แทนที่ command และ args ด้วยการกำหนดค่า stdio ใน เริ่มต้นอย่างรวดเร็ว

สัญญาอนุญาต

MIT — ดู LICENSE