## Summary
`create_work_item_property` fails through MCP with an output validation error, even though the underlying Plane API request succeeds and the property is actually created.
## Environment
- `plane-mcp-server` `0.2.5`
- `FastMCP` `2.14.1`
- self-hosted Plane workspace with paid features enabled
## Reproduction
1. Create a project
2. Enable `work_item_types`
3. Create a custom work item type
4. Call MCP tool:
```json
{
"name": "create_work_item_property",
"arguments": {
"project_id": "<project_uuid>",
"type_id": "<custom_type_uuid>",
"display_name": "Risk",
"property_type": "TEXT",
"settings": {
"display_format": "single-line"
}
}
}
Actual Result
MCP returns:
{
"content": [
{
"type": "text",
"text": "Output validation error: None is not of type 'string'"
}
],
"isError": true
}
Expected Result
The tool should return the created WorkItemProperty.
Additional Evidence
The direct Plane REST API call succeeds with the same payload.
Request:
{
"display_name": "Risk",
"property_type": "TEXT",
"settings": {
"display_format": "single-line"
}
}
Response example from Plane:
{
"id": "5496bd03-1137-4eda-974a-766f19dbd458",
"deleted_at": null,
"relation_type": null,
"created_at": "2026-03-08T18:50:35.983383Z",
"updated_at": "2026-03-08T18:50:35.983390Z",
"name": "risk-direct-api-schema-debug-3",
"display_name": "Risk Direct API Schema Debug 3",
"description": null,
"property_type": "TEXT",
"settings": {
"display_format": "single-line"
},
"external_source": null,
"external_id": null,
"updated_by": null,
"issue_type": "e1603494-a7be-488b-bd25-9fb8c20ee938"
}
Notes
The nullable fields in the successful Plane response include at least:
deleted_at
relation_type
description
external_source
external_id
updated_by
The Plane SDK model WorkItemProperty accepts and serializes this response successfully, so this appears to be an issue in plane-mcp-server / FastMCP output validation rather than in the request payload itself.
Actual Result
MCP returns:
{ "content": [ { "type": "text", "text": "Output validation error: None is not of type 'string'" } ], "isError": true }Expected Result
The tool should return the created
WorkItemProperty.Additional Evidence
The direct Plane REST API call succeeds with the same payload.
Request:
{ "display_name": "Risk", "property_type": "TEXT", "settings": { "display_format": "single-line" } }Response example from Plane:
{ "id": "5496bd03-1137-4eda-974a-766f19dbd458", "deleted_at": null, "relation_type": null, "created_at": "2026-03-08T18:50:35.983383Z", "updated_at": "2026-03-08T18:50:35.983390Z", "name": "risk-direct-api-schema-debug-3", "display_name": "Risk Direct API Schema Debug 3", "description": null, "property_type": "TEXT", "settings": { "display_format": "single-line" }, "external_source": null, "external_id": null, "updated_by": null, "issue_type": "e1603494-a7be-488b-bd25-9fb8c20ee938" }Notes
The nullable fields in the successful Plane response include at least:
deleted_atrelation_typedescriptionexternal_sourceexternal_idupdated_byThe Plane SDK model
WorkItemPropertyaccepts and serializes this response successfully, so this appears to be an issue inplane-mcp-server/ FastMCP output validation rather than in the request payload itself.