Notion MCP server: status options in in_progress group rejected with validation_error
The Notion MCP server (API version 2025-09-03, used via Claude Code, Claude.ai, or Kiro CLI) rejects status property values that belong to the in_progress group. For example, updating a page's Status to "Doing" fails with validation_error (HTTP 400): "Invalid status value for property 'Status': 'Doing'. Value must be one of the following: 'Not Started', 'Drop', 'Done', 'Archived'." The same options are valid in the Notion UI and page reads return them correctly. Why is this happening and is there a workaround?
Originally asked on GitHub: https://github.com/makenotion/notion-mcp-server/issues/232
6 answers
Still open as of the last report (June 2026); no fix has been released. The MCP server's schema fetch returns
groups.in_progressas an empty array even when options are assigned to that group, and write validation is built from that group-derived set. A single data-source fetch is internally inconsistent:<data-source-state>shows"in_progress": [], while the<sqlite-table>definition in the same response lists the option as valid. The option exists server-side (page reads return it), so the bug is in group-membership serialization for status properties, not missing data.Tested workaround from the thread: in the Notion UI, open the Status property and drag every
in_progressoption up into theto_dogroup. The options then serialize undergroups.to_doand become writable immediately; commenters verified{ "Status": "In Progress" }was accepted right after the move. Trade-off: status groups get flattened, so board/group-by-status views and filters on the "In Progress" group need repointing.What does not work:
update-data-sourceDDL (ALTER COLUMN "Status" SET STATUS(...)), re-creating/renaming options, "Save for everyone" on schema edits, disconnecting/reconnecting the connector, and writing by option id/url vs. option name. Options into_doandcompletegroups are unaffected; onlyin_progressoptions are rejected. If you cannot regroup the options, manual UI updates remain the only way to set the in-progress state.Did this work for you?What a GitHub user tried on GitHub (Didn't work)
Updated a page's Status to "Doing", an in_progress-group option, via the MCP API. The call failed with validation_error (HTTP 400) listing only to_do/complete options as valid, and the schema fetch returned groups.in_progress as an empty array.
Source: https://github.com/makenotion/notion-mcp-server/issues/232 (opens external site)
Did this work for you?What @pgh7659 tried on GitHub (Didn't work)
Reproduced the same failure on a Korean status property via Claude Code on mcp.notion.com. Reads of pages already set to in_progress values returned the correct option, proving the options exist server-side and only schema fetch plus write validation miss them.
Did this work for you?What @martin-conur tried on GitHub (Didn't work)
Tried update-data-source DDL (ALTER COLUMN "Status" SET STATUS(...)) to add the options, and tried un-hiding/re-creating/renaming options plus "Save for everyone". The DDL is not accepted for status option lists and the other edits changed nothing.
Did this work for you?What @heysash tried on GitHub (Didn't work)
Deleted and re-grouped the option in the UI and disconnected/reconnected the Claude Notion connector. Multiple fetch calls still returned groups.in_progress as empty, and the connected Notion API cannot create or repair status options programmatically.
Did this work for you?What @As-Tomas tried on GitHub (Worked)
Moved every in_progress option up into the to_do group in the Notion UI. After the move, writes such as { "Status": "In Progress" } were accepted immediately; trade-off is flattened status groups and repointed views/filters.
Did this work for you?