Optimize article
Start an asynchronous optimization job for an article in a campaign.
Tool name: optimize_article
Cost: Free - not billed, and does not draw on a plan quota.
Writes data - confirmation required
This tool creates or changes data. It is not annotated readOnlyHint, so
your MCP client prompts you before it runs, and the server asks for an
explicit confirmation describing exactly what will change. Declining cancels
the call cleanly.
Start an asynchronous optimization job for an article in a campaign. optimizeType may be entity, authoritative_source, or full. The completed result includes the optimized article and its new score.
Returns immediately with { jobId, status, kind, result, error }. This tool does not return the optimized article inline at queue time. After calling it, use get_evaluation_result({ jobId }) to poll the job about every 5 seconds while status is "queued" or "running". If status is "completed", read result. If status is "failed", read error. Optimize jobs are never cached. Do not call optimize_article again just to poll.
Parameters
| Parameter | Type | Required | Notes |
|---|---|---|---|
article | string | Yes | - |
optimizeType | "entity" | "authoritative_source" | "full" | Yes | - |
campaignId | string (uuid) | Yes | - |
workspaceId | string (uuid) | Yes | - |
targetAiPromptId | string (uuid) | No | - |
Full input JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"article": {
"type": "string"
},
"optimizeType": {
"type": "string",
"enum": ["entity", "authoritative_source", "full"]
},
"campaignId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workspaceId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"targetAiPromptId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": ["article", "optimizeType", "campaignId", "workspaceId"]
}Response
Full output JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"jobId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"status": {
"type": "string"
},
"kind": {
"type": "string"
},
"cached": {
"type": "boolean"
},
"result": {
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": ["jobId", "status", "kind"],
"additionalProperties": false
}