makeplane / makeplane/plane-mcp-server

404 on work_items / milestones tools against self-hosted Plane v1.0.0 — SDK calls /work-items/ but instance exposes /issues/

Open
#126 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
325
Forks
178
Avg merge
1d 12h
Merged PRs (30d)
2

Description

Summary

When using plane-mcp-server v0.2.8 against a self-hosted Plane Community Edition v1.0.0 instance (image artifacts.plane.so/makeplane/plane-backend:v1.0.0), every work_items / milestones tool returns HTTP 404 because the underlying plane-sdk calls /work-items/ and /milestones/ endpoints that don't exist on the v1.0.0 API surface — which still exposes the canonical /issues/ and (no) /milestones/.

Affected endpoints (404)

  • create_work_item, list_work_items (project + workspace scope)
  • retrieve_work_item, update_work_item, delete_work_item
  • create_milestone, list_milestones
  • get_workspace_features

Endpoints that DO work (legacy paths preserved)

  • create_project, list_projects
  • create_state, list_states
  • create_label, list_labels
  • create_module, list_modules
  • list_cycles
  • get_workspace_members

Reproduction

  1. Self-host Plane CE v1.0.0 (Docker images artifacts.plane.so/makeplane/plane-{backend,frontend,proxy,admin,space,live}:v1.0.0)
  2. Generate an API key (plane_api_xxx…)
  3. Configure plane-mcp-server v0.2.8 with PLANE_API_KEY + PLANE_WORKSPACE_SLUG + PLANE_BASE_URL
  4. Call any work_item tool → 404
  5. Verify directly with curl:
# 200 ✓ — what Plane v1.0.0 exposes
curl -H "X-Api-Key: $PLANE_API_KEY" \
  "$PLANE_BASE_URL/api/v1/workspaces/$SLUG/projects/$PID/issues/"

# 404 ✗ — what the SDK calls
curl -H "X-Api-Key: $PLANE_API_KEY" \
  "$PLANE_BASE_URL/api/v1/workspaces/$SLUG/projects/$PID/work-items/"

Root cause (SDK source)

plane-sdk/plane/api/work_items/base.py:45 and following construct URLs like:

/workspaces/{slug}/projects/{pid}/work-items
/workspaces/{slug}/work-items/search
/workspaces/{slug}/work-items/advanced-search

These match the renamed UI endpoints in Plane Cloud / newer versions, but the publicly exposed REST API of Plane v1.0.0 CE still uses /issues/ (and does not expose milestones at all via REST).

Suggested fix

Either:

  • Add a version-detection branch in plane-sdk that falls back to /issues/ when API returns 404 on /work-items/, or
  • Document a compat env flag (PLANE_USE_LEGACY_ISSUES_ENDPOINT=1) for self-hosted v1.0.0 instances, or
  • Pin the SDK URL pattern based on the Plane server version (which is queryable at /)

Workaround currently in production

Internal REST helper bypassing the MCP for work-items, hitting /issues/ directly:
https://github.com/healdigital/Paperclip/blob/main/companies/heal-sarl/scripts/plane-rest-helper.sh
(used to bootstrap 4 production projects with 44 work items today, all created successfully)

Environment

  • Plane CE: v1.0.0 (self-hosted on Coolify)
  • plane-mcp-server: v0.2.8 (via uvx)
  • plane-sdk: v0.2.6
  • Client: Claude Code (Anthropic Agent SDK)
  • Date: 2026-05-18

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in plane-sdk/plane/api/work_items/base.py at line 45 and reproduce the mismatch with the documented curl requests against a Plane CE v1.0.0 instance. Completion should cover the affected work-item calls using the exposed /issues/ paths and define an explicit outcome for milestones, which v1.0.0 does not expose, while preserving compatibility with newer paths.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, python
Domain
api, backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.