---
title: "Upsert Article Note"
method: POST
path: "/api/mcp/upsert_article_note"
tags: ["mcp"]
---

# Upsert Article Note

`POST /api/mcp/upsert_article_note`

## Request

- Base URL: `https://writer.swapp1990.org` (the document declares no server; this is the origin it was published from)
- URL: `https://writer.swapp1990.org/api/mcp/upsert_article_note`
- Auth: none declared

Add or update a review note on an article draft.

Notes can come from Codex or the website review UI. They stay visible
on the article page and are consumed by revise_article_from_notes.

## Request body

- UpsertArticleNoteInput
  - `job_id` string, required: The story job ID.
  - `note_id` string, nullable: Existing note id to update. Omit to create a new note.
  - `text` string, required: Review note to apply to the article draft. Later notes override stale original-request constraints. For deterministic replacement, write 'replace title/deck/body exactly' and include Title:, Deck:, and Body: sections.
  - `paragraph_index` integer, nullable: 0-based draft paragraph index the note refers to.
  - `selected_text` string, nullable: Optional text span the note is anchored to.
  - `origin` string: Where the note came from, such as Codex session or website review.

## Response `200`

Successful Response

- GenericToolResponse: Fallback for tools whose payload is still being tightened.
  - `story_url` string, nullable
  - `article_url` string, nullable
  - `job_id` string, nullable
  - `status` string, nullable
  - `is_terminal` boolean, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/swapp1990/apis/writeforyou-mcp-api.md) · [All operations](https://skmtc.dev/swapp1990/apis/writeforyou-mcp-api/llms.txt) · [OpenAPI document](https://skmtc.dev/swapp1990/apis/writeforyou-mcp-api/revisions/ce5e2a89ab4d?raw)
