Turn a product photo and a brief into a full ad campaign: scripts, stills, client-ready PDF.
Maintained by@campaignpack(verified)Also a maintainer?
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Stop a running campaign.
Job id returned by start_campaign.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http campaignpack https://tools.campaignpack.ai/mcp
Tool list last changed Nov 7, 2026.
Stop a running campaign.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | Job id returned by start_campaign. |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"description": "Job id returned by start_campaign."
}
}
}Answer a paused run that wants to send the user's data somewhere outside Campaign Pack. Ask the person; never decide for them.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | Job id returned by start_campaign. |
| decision* | string | What the person said: 'allow' to let the run go ahead, 'refuse' to deny it. This must be their answer, not yours. |
{
"type": "object",
"required": [
"job_id",
"decision"
],
"properties": {
"job_id": {
"type": "string",
"description": "Job id returned by start_campaign."
},
"decision": {
"enum": [
"allow",
"refuse"
],
"type": "string",
"description": "What the person said: 'allow' to let the run go ahead, 'refuse' to deny it. This must be their answer, not yours."
}
}
}Progress of a running campaign: status, the tools it has just called, queue position, and whether it is waiting for a human approval. Poll about every 20 seconds.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | Job id returned by start_campaign. |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"description": "Job id returned by start_campaign."
}
}
}Collect a finished campaign: the folder, its files, the written overview, and the path to the PDF.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | Job id returned by start_campaign. |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"description": "Job id returned by start_campaign."
}
}
}Who owns a campaign and who it is shared with.
| Argument | Type | Description |
|---|---|---|
| session_id* | string | Campaign to act on — the session id from start_campaign or check_campaign. |
{
"type": "object",
"required": [
"session_id"
],
"properties": {
"session_id": {
"type": "string",
"description": "Campaign to act on — the session id from start_campaign or check_campaign."
}
}
}Give a teammate access to a campaign by email address — including while it is still running. They see the same live run from their own AI client or the website, can abort it, answer its approval prompts, and take the next turn. They must already have a Campaign Pack account; sharing does not create one.
| Argument | Type | Description |
|---|---|---|
| email* | string | Email address of the person to let in. They must already have a Campaign Pack account under this address; sharing does not create one or send an invitation. |
| session_id* | string | Campaign to act on — the session id from start_campaign or check_campaign. |
{
"type": "object",
"required": [
"session_id",
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Email address of the person to let in. They must already have a Campaign Pack account under this address; sharing does not create one or send an invitation."
},
"session_id": {
"type": "string",
"description": "Campaign to act on — the session id from start_campaign or check_campaign."
}
}
}Start a marketing campaign pack on Campaign Pack's own GPUs. Produces a campaign plan, ideas, ad and social scripts, a creator brief, and a client-ready PDF — plus product stills on the image sizes. Returns immediately with a job id; the run itself takes minutes, so poll check_campaign rather than waiting. Write the brief yourself from what the user told you: the richer and more specific it is, the better the pack. Nothing is sent to any third-party model provider.
| Argument | Type | Description |
|---|---|---|
| size | string | Pack size. Available here: 'text' (about a minute), 'lite' (about ten minutes). |
| brand* | string | The brand name, spelled exactly as the customer spells it. Every mention in the pack is rewritten to match this. |
| brief* | string | What the product is, who it is for, what matters about it. A few sentences to a few paragraphs. State only facts the user gave you — invented metrics or customers end up in the finished pack. |
| photo | string | Workspace path from upload_product_photo. Required for the image sizes: the stills are edited from the real photo rather than generated from nothing. |
{
"type": "object",
"required": [
"brief",
"brand"
],
"properties": {
"size": {
"enum": [
"text",
"lite"
],
"type": "string",
"description": "Pack size. Available here: 'text' (about a minute), 'lite' (about ten minutes)."
},
"brand": {
"type": "string",
"description": "The brand name, spelled exactly as the customer spells it. Every mention in the pack is rewritten to match this."
},
"brief": {
"type": "string",
"description": "What the product is, who it is for, what matters about it. A few sentences to a few paragraphs. State only facts the user gave you — invented metrics or customers end up in the finished pack."
},
"photo": {
"type": "string",
"description": "Workspace path from upload_product_photo. Required for the image sizes: the stills are edited from the real photo rather than generated from nothing."
}
}
}Revoke a collaborator's access. Takes effect on their next request.
| Argument | Type | Description |
|---|---|---|
| email* | string | Email address of the collaborator to remove. The owner cannot be removed this way. |
| session_id* | string | Campaign to act on — the session id from start_campaign or check_campaign. |
{
"type": "object",
"required": [
"session_id",
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Email address of the collaborator to remove. The owner cannot be removed this way."
},
"session_id": {
"type": "string",
"description": "Campaign to act on — the session id from start_campaign or check_campaign."
}
}
}Put a product photo into the user's workspace so a campaign can edit stills from the real thing. Base64 of the image bytes.
| Argument | Type | Description |
|---|---|---|
| filename* | string | Name to save it under, with the extension — 'bottle.jpg'. Reusing a name that is already there replaces that photo. |
| data_base64* | string | The image file's bytes, base64-encoded. The raw image, not a data: URL and not a path on your own machine. |
{
"type": "object",
"required": [
"filename",
"data_base64"
],
"properties": {
"filename": {
"type": "string",
"description": "Name to save it under, with the extension — 'bottle.jpg'. Reusing a name that is already there replaces that photo."
},
"data_base64": {
"type": "string",
"description": "The image file's bytes, base64-encoded. The raw image, not a data: URL and not a path on your own machine."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 7, 2026.
What changed in this server's tools since we started watching, newest first. Each change is scanned again.
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string"
}
}
}{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"description": "Job id returned by start_campaign."
}
}
}{
"type": "object",
"required": [
"job_id",
"decision"
],
"properties": {
"job_id": {
"type": "string"
},
"decision": {
"enum": [
"allow",
"refuse"
],
"type": "string"
}
}
}{
"type": "object",
"required": [
"job_id",
"decision"
],
"properties": {
"job_id": {
"type": "string",
"description": "Job id returned by start_campaign."
},
"decision": {
"enum": [
"allow",
"refuse"
],
"type": "string",
"description": "What the person said: 'allow' to let the run go ahead, 'refuse' to deny it. This must be their answer, not yours."
}
}
}{
"type": "object",
"required": [
"session_id",
"email"
],
"properties": {
"email": {
"type": "string"
},
"session_id": {
"type": "string"
}
}
}{
"type": "object",
"required": [
"session_id",
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Email address of the collaborator to remove. The owner cannot be removed this way."
},
"session_id": {
"type": "string",
"description": "Campaign to act on — the session id from start_campaign or check_campaign."
}
}
}{
"type": "object",
"required": [
"session_id"
],
"properties": {
"session_id": {
"type": "string"
}
}
}{
"type": "object",
"required": [
"session_id"
],
"properties": {
"session_id": {
"type": "string",
"description": "Campaign to act on — the session id from start_campaign or check_campaign."
}
}
}{
"type": "object",
"required": [
"session_id",
"email"
],
"properties": {
"email": {
"type": "string"
},
"session_id": {
"type": "string"
}
}
}{
"type": "object",
"required": [
"session_id",
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Email address of the person to let in. They must already have a Campaign Pack account under this address; sharing does not create one or send an invitation."
},
"session_id": {
"type": "string",
"description": "Campaign to act on — the session id from start_campaign or check_campaign."
}
}
}{
"type": "object",
"required": [
"filename",
"data_base64"
],
"properties": {
"filename": {
"type": "string"
},
"data_base64": {
"type": "string"
}
}
}{
"type": "object",
"required": [
"filename",
"data_base64"
],
"properties": {
"filename": {
"type": "string",
"description": "Name to save it under, with the extension — 'bottle.jpg'. Reusing a name that is already there replaces that photo."
},
"data_base64": {
"type": "string",
"description": "The image file's bytes, base64-encoded. The raw image, not a data: URL and not a path on your own machine."
}
}
}{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string"
}
}
}{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"description": "Job id returned by start_campaign."
}
}
}{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string"
}
}
}{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"description": "Job id returned by start_campaign."
}
}
}