MMetadata /docs
Docs/Tools/check_campaign_launch_readiness

check_campaign_launch_readiness

Check whether a draft campaign is ready to launch, per channel.

Read campaigns

Returns data. Calling it changes nothing, so it is safe in an unattended loop.

What it does

Check whether a draft campaign is ready to launch, per channel. Reads the campaign's real configuration from the platform and reports, for each ENABLED channel, whether it has the ads, audience, offer, budget AND a live channel connection it needs to go live - plus a specific list of blockers for anything missing.

                KEYWORDS: campaign, launch, readiness, ready, preflight, can launch, blockers, missing, go live, validate, checklist

                WHEN TO USE:
                - Before launching a campaign, to confirm it is actually ready
                - After assembling or editing a draft, as the go/no-go check
                - When the user asks "is my campaign ready to launch?" or "what's missing?"

                RETURNS:
                A per-channel readiness report:
                - is_launchable: whether EVERY enabled channel is ready
                - verified: whether the platform's pre-launch check actually answered. When false,
                  is_launchable is an assumption, NOT a verdict - say the check could not be run
                  instead of telling the user the campaign is ready.
                - channels: [{channel, launchable, blockers[], ads, audiences, offers, budget}]
                - summary: a one-line human verdict
                This is a READ-ONLY check - it does NOT launch anything. Use launch_campaign to actually launch.

                CHANNEL CONNECTION: a channel with no live integration is reported as a blocker here, and the
                platform will refuse the launch itself. This is the ONLY point in a build where a missing
                connection matters - audiences, targeting, offers, creative and the draft campaign are all
                built without one on purpose. So do NOT ask the user to connect anything earlier; raise it
                here, name the channels, and offer to connect them.

                PARAMETERS:
                - campaign_id: The wizard campaign ID (integer, required)

                CAMPAIGN ID SOURCES:
                - search_campaigns_by_names tool (returns campaign IDs)
                - create_campaign tool response (returns campaign_id)

Arguments

ArgumentTypeNotes
campaign_id integer required The wizard campaign ID to check launch readiness for

Request

curl
curl -s -X POST https://mcp-server.metadata.io/mcp \
  -H "Authorization: $METADATA_PAT" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_campaign_launch_readiness","arguments":{"campaign_id":0}}}'

Response

Recorded with these arguments. Enum values are the first the tool's own schema declares; ids were fetched live from a list_ call immediately before.

arguments used
{
 "campaign_id": "[number redacted]"
}

Real, from the production server, in 1510 ms. Values that identify a customer or disclose money are replaced with typed placeholders; keys, types and nesting are exactly as returned.

recorded response
{
 "success": true,
 "campaign_id": "[number redacted]",
 "campaign_name": "[campaign_name redacted]",
 "is_launchable": true,
 "verified": true,
 "blockers": [],
 "summary": "[summary redacted]",
 "channels": [
  {
   "channel": "Facebook",
   "launchable": true,
   "blockers": [],
   "ads": 3,
   "audiences": 3,
   "offers": 2,
   "budget": 50,
   "keywords": 0
  },
  {
   "channel": "LinkedIn",
   "launchable": true,
   "blockers": [],
   "ads": 3,
   "audiences": 3,
   "offers": 2,
   "budget": 50,
   "keywords": 0
  }
 ]
}

Other campaigns tools:

All 160 tools · machine-readable index