Summary
When a published article has pending draft edits saved via note_update_article (which uses draft_save?is_temp_saved=true), calling note_publish_article publishes the new body but the old title. The title change is silently lost.
Reproduction
- Take a published article (e.g. key
nXXXX) with title Old Title.
note_update_article(article_id, title="New Title", body="new body") → returns success (saved as draft).
note_publish_article(article_id=...) → article is published with the new body, but the live page still shows Old Title.
Confirmed on a real note.com article (2026-06-10).
Root cause
In publish_article() (src/note_mcp/api/articles.py), the title is read from data.name first, falling back to note_draft.name only when data.name is empty:
article_title = article_data.get("name", "")
if not article_title:
note_draft = article_data.get("note_draft")
...
For a published article with pending edits, data.name holds the stale published title (truthy), so note_draft.name (the new title) is never used. Note the body logic right below already prefers note_draft.body — the title logic is asymmetric.
Fix
Prefer note_draft.name over data.name, mirroring the body logic. PR with a regression test incoming.
Summary
When a published article has pending draft edits saved via
note_update_article(which usesdraft_save?is_temp_saved=true), callingnote_publish_articlepublishes the new body but the old title. The title change is silently lost.Reproduction
nXXXX) with titleOld Title.note_update_article(article_id, title="New Title", body="new body")→ returns success (saved as draft).note_publish_article(article_id=...)→ article is published with the new body, but the live page still showsOld Title.Confirmed on a real note.com article (2026-06-10).
Root cause
In
publish_article()(src/note_mcp/api/articles.py), the title is read fromdata.namefirst, falling back tonote_draft.nameonly whendata.nameis empty:For a published article with pending edits,
data.nameholds the stale published title (truthy), sonote_draft.name(the new title) is never used. Note the body logic right below already prefersnote_draft.body— the title logic is asymmetric.Fix
Prefer
note_draft.nameoverdata.name, mirroring the body logic. PR with a regression test incoming.