---
title: "Plan Story"
method: POST
path: "/api/mcp/plan_story"
tags: ["mcp"]
---

# Plan Story

`POST /api/mcp/plan_story`

## 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/plan_story`
- Auth: none declared

Granular alternative to generate_story — runs the PLANNER ONLY.

Creates a fresh job and kicks off the planner in the background.
Settles at status='outlining' with the plan committed; does NOT
auto-chain into characterizer or setting research. Use this when
you want explicit control over each phase (call generate_cast and
regenerate_setting separately afterwards).

For one-shot "give me a complete story foundation" use generate_story.

Returns immediately with `{job_id, status: "pending", story_url?}`;
poll get_job_status / wait_for_status for progress.

## Request body

- PlanStoryInput: Input for the standalone `plan_story` MCP tool. Mirrors GenerateStoryInput minus auto_approve. In client mode, the same tool also returns/commits no-server-LLM planning artifacts.
  - `job_id` string, nullable: Client-authoring continuation id. Omit to create a new story shell; include when submitting client_plan.
  - `premise` string, required: The premise for the new story.
  - `chapter_count` integer, required: The number of chapters to outline.
  - `target_words_per_chapter` integer, nullable: Target word count per chapter (used by the writer later).
  - `nsfw` boolean: Content-rating metadata; does not override client safety policies.
  - `model` string, nullable: Model override (e.g. 'grok-4').
  - `authoring_mode` 'server' | 'client', nullable: Set to 'client' to use the caller's own model/knowledge; the server returns a skill-equivalent planning brief or commits client_plan without server LLM usage.
  - `server_llm` boolean, nullable: Set false as an alias for authoring_mode='client'. Do not send model in this mode.
  - `client_plan` object, nullable: Client-authored story plan to commit through plan_story in client mode.
  - `client_name` string: Client identity for no-LLM provenance.
  - `client_model` string, nullable: Client-side model name for no-LLM provenance. Never used for server API calls.
  - `artifact_version` string: Version label for submitted client_plan artifacts.

## 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)
