Evaluate article
Start an asynchronous evaluation job for an article in a campaign.
Tool name: evaluate_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 evaluation job for an article in a campaign. Scores SEO + entity coverage. By default persistContent=true, so the submitted article is saved as campaign content; set persistContent=false when you only want to score without saving.
Returns immediately with { jobId, status, kind, cached, result, error }. This tool usually does not return the final score inline. 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. If cached=true and status is already "completed", the result is included inline and no polling is needed. Do not call evaluate_article again just to poll.
Parameters
| Parameter | Type | Required | Notes |
|---|---|---|---|
article | string | Yes | - |
campaignId | string (uuid) | Yes | - |
workspaceId | string (uuid) | Yes | - |
scoreOnly | boolean | No | Defaults to true. |
persistContent | boolean | No | Defaults to true. |
metaTitle | string | No | - |
metaDescription | string | No | - |
Full input JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"article": {
"type": "string"
},
"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)$"
},
"scoreOnly": {
"default": true,
"type": "boolean"
},
"persistContent": {
"default": true,
"type": "boolean"
},
"metaTitle": {
"type": "string"
},
"metaDescription": {
"type": "string"
}
},
"required": ["article", "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
}