Skip to content

add_work_items_to_module succeeds but returns "Unexpected response type" #124

Description

@OshriFatkiev

Summary

add_work_items_to_module appears to attach the work item to the module, but the MCP tool reports:

Unexpected response type

From what I can see, the Plane API operation itself succeeds. The failure seems to happen when the MCP layer handles the successful response.

Environment

  • plane-mcp-server==0.2.8
  • plane-sdk==0.2.8
  • fastmcp==2.14.4
  • Self-hosted Plane instance: v2.5.0

Reproduction

Call the MCP tool:

add_work_items_to_module(
    project_id="<project-id>",
    module_id="<module-id>",
    issue_ids=["<work-item-id>"],
)

Actual Behavior

The MCP tool returns:

tool call failed for `plane/add_work_items_to_module`

Caused by:
    Unexpected response type

However, the work item is attached successfully. A follow-up list_module_work_items call shows the work item in the module, and repeated calls do not create duplicates.

Expected Behavior

If the Plane API operation succeeds, the MCP tool should report success or return the API response in a shape accepted by the MCP/FastMCP layer.

Evidence

Raw Plane API behavior:

POST /api/v1/workspaces/{workspace_slug}/projects/{project_id}/modules/{module_id}/module-issues/
body: { "issues": ["<work-item-id>"] }
response: 200 application/json
top-level response type: JSON array/list of module-issue association records

This matches the public Plane API docs for "Add work items to module", which show Response 200 as a JSON array.

SDK behavior:

client.modules.add_work_items(...)

This succeeds and returns a Python list of module/work-item association records.

MCP behavior:

add_work_items_to_module(...)

This performs the operation successfully, but reports Unexpected response type.

Possible Cause

The SDK method appears to be annotated or advertised as returning None, while the Plane API returns a JSON array and the SDK returns that array.

For example:

def add_work_items(...) -> None:
    return self._post(...)

So the MCP/FastMCP response schema may expect None, receive a list, and reject the successful response.

Related

This may be related to #58, but seems distinct: #58 is about array parameters being serialized incorrectly, while here the array request is accepted and the operation succeeds.

Links

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions