line_item_readiness
Check whether AdCrunch can build a Line Item now, and if it cannot, why and what to do.
Ask the agent to check a Line Item before it builds it on Meta. The Meta tools do not read your Campaign Plan, so this check is how the agent finds a problem before it spends.
“Can you build the Meta Line Item of the spring sale Campaign Plan now?”
The agent calls line_item_readiness. When the Line Item is ready, the answer gives the dates that apply, the budget, and whether the budget goes to Meta as a lifetime total or as a daily rate. When it is not ready, the answer names one reason and gives the fix: for example, an ad account in a different currency. AdCrunch never converts a currency.
When a person must validate the Line Item, the agent gives you the link to the page of the Campaign Plan in the AdCrunch console. The check is advice: the Meta tools do not read it, so AdCrunch does not refuse to build a Line Item that is not ready.
Plan a campaign walks the whole job.
Reference
Check whether AdCrunch can build a Line Item now, and if it cannot, why. Call it before you build a Line Item with a provider write tool, such as meta_create_campaign. It reads, it changes nothing, and it calls no provider. readiness.status is ready, or it names one reason: a person has not validated the Line Item in the AdCrunch console, AdCrunch cannot write to the channel, the Line Item names no ad account, the ad account is not connected, the ad account belongs to another provider, AdCrunch does not know the currency of the ad account, the currencies differ, or the dates are missing or in the wrong order. fix tells you what to do about the reason. consoleUrl is the page of the Campaign Plan: give it to the user when a person must act there. When the Line Item is ready, the answer gives the dates that apply, and it tells you whether the budget goes to the provider as a lifetime total or as a daily rate. This answer is advice: the provider write tools do not read it. AdCrunch never converts a currency.
Input
| Argument | Type | Required | Description |
|---|---|---|---|
campaign_plan_name |
string | yes | The Campaign Plan slug — its stable per-organization handle. |
line_item_id |
string | yes | The Line Item id, as returned by campaign_plan_get. |
Output
A successful call returns this object in structuredContent.
| Field | Type | Always present | Description |
|---|---|---|---|
consoleUrl |
string | yes | The page of the Campaign Plan in the AdCrunch console. A person validates a Line Item and approves a Campaign Plan there. |
fix |
string or null | yes | What to do so that the Line Item becomes ready, in one sentence. null when readiness.status is ready. |
readiness |
object | yes | Whether AdCrunch can build the Line Item now, and if it cannot, why. This is advice: the provider write tools do not read it. |
readiness.status |
ready or not_validated or channel_not_executable or no_advertiser or advertiser_not_owned or provider_mismatch or account_currency_unknown or currency_mismatch or no_window or window_inverted |
yes | ready: AdCrunch can build the Line Item now. not_validated: A person has not validated the Line Item in the AdCrunch console. channel_not_executable: AdCrunch cannot write to this channel today. no_advertiser: The Line Item names no ad account. advertiser_not_owned: The ad account is not connected to this organization. provider_mismatch: The ad account belongs to a different provider than the channel. account_currency_unknown: AdCrunch does not know the currency of the ad account. currency_mismatch: The ad account uses a different currency than the Campaign Plan. AdCrunch never converts a currency. no_window: The Line Item and the Campaign Plan give no date at all. window_inverted: The start that applies falls after the end that applies. Each row is ordered on its own, and only the pair shows this. |
readiness.advertiserId |
string | yes | Only when status is ready. The ad account, acc_…. |
readiness.budget |
number or null | yes | Only when status is ready. The budget of the Line Item, in whole units of currency, or null when it has none. |
readiness.currency |
string | yes | Only when status is ready. The currency of the Campaign Plan. It is also the currency of the ad account. |
readiness.endDate |
string or null | yes | Only when status is ready. The end that applies: the end of the Line Item, else the end of the Campaign Plan. null when neither has one. |
readiness.provider |
one of meta, gads, tiktok, x, openai, snapchat, dv360 |
yes | Only when status is ready. The provider that sells the channel. |
readiness.startDate |
string or null | yes | Only when status is ready. The start that applies: the start of the Line Item, else the start of the Campaign Plan. null when neither has one. |
readiness.unit |
one of total, daily |
yes | Only when status is ready. How the budget goes to the provider: total as a lifetime budget, daily as a daily budget. |
readiness.channel |
one of meta, tiktok, snapchat, google_search, google_pmax, google_display, youtube, programmatic_display, linkedin, x |
yes | Only when status is channel_not_executable. The channel of the Line Item. |
readiness.provider |
one of meta, gads, tiktok, x, openai, snapchat, dv360 or null |
yes | Only when status is channel_not_executable. The provider that sells the channel, or null when no integration of AdCrunch sells it. |
readiness.actual |
one of meta, gads, tiktok, x, openai, snapchat, dv360 |
yes | Only when status is provider_mismatch. The provider of the ad account. |
readiness.expected |
one of meta, gads, tiktok, x, openai, snapchat, dv360 |
yes | Only when status is provider_mismatch. The provider that sells the channel. |
readiness.advertiserId |
string | yes | Only when status is account_currency_unknown. The ad account, acc_…. |
readiness.accountCurrency |
string | yes | Only when status is currency_mismatch. The currency of the ad account. |
readiness.planCurrency |
string | yes | Only when status is currency_mismatch. The currency of the Campaign Plan. |
readiness.endDate |
string | yes | Only when status is window_inverted. The end that applies. |
readiness.startDate |
string | yes | Only when status is window_inverted. The start that applies. |
Failure codes
A failed call has isError set, and structuredContent.error holds one of these codes. Errors describes the shape of a failed call.
not_foundorganization_unentitledforbiddeninvalid_requestinternal_error
Scope
The token must hold campaign_plan:read. Auth & scopes lists each scope.
Annotations
A client reads these hints. A hint that the tool does not declare has the default value of the MCP specification.
- Read-only. The tool changes nothing.
- Closed world. The tool reads and writes the data of AdCrunch only.
Example
The arguments:
{
"campaign_plan_name": "spring-sale",
"line_item_id": "lni_2d9e77"
}
The result, in structuredContent:
{
"consoleUrl": "https://console.adcrunch.dev/campaign-plans/spring-sale",
"fix": null,
"readiness": {
"advertiserId": "acc_1203456789012345",
"budget": 2500,
"currency": "EUR",
"endDate": "2026-05-31",
"provider": "meta",
"startDate": "2026-03-01",
"status": "ready",
"unit": "total"
}
}