ask_content_assistant
Send a natural-language request to Marcora's in-document Content Assistant to edit, extend, or ideate on an existing document. It runs asynchronously and streams its reply and any edits into the document's sidebar in Marcora.
Input Schema
{
"type": "object",
"required": [
"content_id",
"prompt"
],
"properties": {
"prompt": {
"type": "string",
"description": "The request in natural language (an edit, an extension, or a question)."
},
"content_id": {
"type": "string",
"format": "uuid",
"description": "UUID of the content document to act on. Get from list_content, get_content, or get_project."
},
"project_id": {
"type": "string",
"format": "uuid",
"description": "Project UUID (from list_projects) whose context to include."
},
"ai_provider": {
"enum": [
"anthropic",
"openai"
],
"type": "string",
"description": "Model family to use."
},
"selected_text": {
"type": "string",
"description": "Optional highlighted text in the document to focus the request on."
},
"thinking_mode": {
"type": "boolean",
"description": "Enable extended reasoning for complex requests."
},
"chat_only_mode": {
"type": "boolean",
"description": "Force a sidebar-only reply with no document changes."
},
"collection_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Context Collection IDs (from list_context_collections) to include."
}
}
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Always pending on dispatch."
},
"generation_id": {
"type": "string",
"format": "uuid",
"description": "Identifies this run. Poll get_generation_status with it for the result."
}
}
}Instructions
Send a natural-language request to Marcora's in-document Content Assistant for an existing content document. The request can ask for an edit ("add an intro paragraph", "tighten paragraph two"), an extension, or pure ideation / a question ("give me three headline ideas") — the assistant decides whether to change the document or just reply.
This is the in-editor Content Assistant that operates on one specific document — not the general Marcora Agent.
Asynchronous. Returns a generation_id (UUID) immediately and does the model work in the background. When the user has the document open in Marcora, the assistant's reply and any edits stream live into the document's AI Assistant sidebar via a realtime channel — no polling needed. Headless callers (or anyone wanting the result text) poll get_generation_status with the returned generation_id.
One run per document at a time. While a run is in progress, a second ask_content_assistant call on the same document fails. A run that may edit the document also holds it: nobody (including the caller) can edit it in the app until the run finishes or fails, when it is handed back. A chat_only_mode: true run doesn't hold the document, so people can keep editing while it replies. To send several requests to one document, wait for each run to finish (get_generation_status reaches a terminal status) before sending the next, or combine them into one prompt.
Behavior
- The assistant only rewrites the document body when it decides the request warrants a change; otherwise it just replies in the sidebar thread.
chat_only_mode: trueforces a reply-only response with no document changes.- The current document body and prior sidebar conversation are loaded automatically; pass
collection_idsand/orproject_idto fold in extra context.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
content_id |
string (uuid) | Yes | The content document to act on (from list_content, get_content, or get_project) |
prompt |
string | Yes | The request, in natural language |
selected_text |
string | No | Text the user has highlighted in the document, to focus the request on |
thinking_mode |
boolean | No | Enable extended reasoning for harder requests |
chat_only_mode |
boolean | No | Force a reply-only response with no document edit |
ai_provider |
string | No | Model family: anthropic (default) or openai |
collection_ids |
array | No | Context Collection IDs (from list_context_collections) to include |
project_id |
string (uuid) | No | Project UUID (from list_projects) whose context to include |
Output
| Field | Type | Description |
|---|---|---|
generation_id |
string (uuid) | Identifies this run. Poll get_generation_status with it for the result |
status |
string | Always pending on dispatch |
Errors
notfound—content_idmatches no content document- "Marcora is already updating this document." — another run on this document is still in progress. Wait for it to finish (poll
get_generation_statusif you have itsgeneration_id), then retry. Do not retry in a tight loop.
Example prompts
- "Add a short intro paragraph to this document"
- "Give me three alternative headlines for this draft" (reply-only)
- "Tighten the second paragraph and fix the tone"