Skip to main content
Glama

Edit campaign

campaignstack_edit_campaign
Destructive

Create, update, archive, unarchive, or edit singular campaign components: ICP, persona, roadmap phase, topic (add, reweight or remove by topicId or exact taxonomy name; an unknown one fails with the valid names), a LinkedIn search watch on a topic (search_watch: start, stop or resume it, and choose which of the workspace's LinkedIn accounts run it; it takes any taxonomy topic, even one the campaign does not carry; a workspace runs one watch per topic, so a second watch returns enabled:false with a disabledReason), signal weight, and automation state. An icp operation already schedules a rescore of already-scored leads automatically; set rescore:true (optionally with rescoreLeadIds) on it to also score every unscored campaign lead against the new criteria, since that is not automatic. This can spend credits, paid provider quota, or model-backed work. Tell the user the cost or budget meaning first when the tool reports one. Also permanently deletes a whole campaign and cascades its data (delete), or a single ICP, persona, or phase (delete_icp/delete_persona/delete_phase); each requires confirmed:true and cannot be undone, so name what will be deleted and wait for an explicit yes first. Use archive to stop work without deleting history, and restores a previous campaign guidance or offer addendum version with the top-level restoreVersionId field, using a versionId from campaignstack_get_campaigns' guidanceHistory include. Each operation returns success or failure independently. Score impacts and topic weights are bounded; archive requires confirmed:true and does not send messages; unarchive reverses it and needs no confirmation.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
operationsYes
workspaceIdNoWorkspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too.
restoreVersionIdNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okNo
resultsNo
warningsNo
workspaceIdNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / operations / items / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "clientOperationId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "connectionDegreeMode": {
      -        "enum": [
      -          "discovery",
      -          "relationship"
      -        ],
      -        "type": "string"
      -      },
      -      "description": {
      -        "type": "string"
      -      },
      -      "goal": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "offerAddendum": {
      -        "maxLength": 1500,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "outreachIntents": {
      -        "description": "An UNRANKED menu of acceptable outcomes for this outreach. Answers 'why are we writing to these people': a message with no stated purpose reads as a compliment plus an open question. The craft picks the outcome this reader and this thread can plausibly give and says the reason in its own words, and it switches when the lead's own words open another door, so order carries no meaning and listing several is how a non-buyer still gets a relevant message. Resolution is workspace then campaign then workflow, and the narrowest non-empty list REPLACES the wider ones rather than merging, so setting it here overrides the level above. Pass an empty array to clear this level and fall back.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "detail": {
      -              "description": "The workspace's own words for this outcome, e.g. '15 minutes on how you price retainers'. Required for kind='other', which has no default ask.",
      -              "type": "string"
      -            },
      -            "kind": {
      -              "enum": [
      -                "customer",
      -                "advice",
      -                "intro",
      -                "partner",
      -                "candidate",
      -                "collaboration",
      -                "investor",
      -                "other"
      -              ],
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "kind"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "title": {
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "title",
      -      "goal"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignGuidance": {
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "connectionDegreeMode": {
      -        "enum": [
      -          "discovery",
      -          "relationship"
      -        ],
      -        "type": "string"
      -      },
      -      "description": {
      -        "type": "string"
      -      },
      -      "offerAddendum": {
      -        "maxLength": 1500,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "update",
      -        "type": "string"
      -      },
      -      "outreachIntents": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/outreachIntents",
      -        "description": "An UNRANKED menu of acceptable outcomes for this outreach. Answers 'why are we writing to these people': a message with no stated purpose reads as a compliment plus an open question. The craft picks the outcome this reader and this thread can plausibly give and says the reason in its own words, and it switches when the lead's own words open another door, so order carries no meaning and listing several is how a non-buyer still gets a relevant message. Resolution is workspace then campaign then workflow, and the narrowest non-empty list REPLACES the wider ones rather than merging, so setting it here overrides the level above. Pass an empty array to clear this level and fall back."
      -      },
      -      "title": {
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "confirmed": {
      -        "const": true,
      -        "type": "boolean"
      -      },
      -      "op": {
      -        "const": "archive",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId",
      -      "confirmed"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "op": {
      -        "const": "unarchive",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "companySizes": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "fitStatement": {
      -            "type": "string"
      -          },
      -          "icpId": {
      -            "type": "string"
      -          },
      -          "industries": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "keywords": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "locations": {
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "city": {
      -                  "type": "string"
      -                },
      -                "country": {
      -                  "type": "string"
      -                },
      -                "raw": {
      -                  "type": "string"
      -                },
      -                "region": {
      -                  "type": "string"
      -                }
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "requirePersonaCoverage": {
      -            "enum": [
      -              "covered",
      -              "covered_or_hiring"
      -            ],
      -            "type": "string"
      -          },
      -          "seniorities": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "titles": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "op": {
      -        "const": "icp",
      -        "type": "string"
      -      },
      -      "rescore": {
      -        "type": "boolean"
      -      },
      -      "rescoreLeadIds": {
      -        "items": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 100,
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "description": {
      -            "type": "string"
      -          },
      -          "fitStatement": {
      -            "type": "string"
      -          },
      -          "goals": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "icpId": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "objectionResponses": {
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "objection": {
      -                  "type": "string"
      -                },
      -                "response": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "objection",
      -                "response"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "objections": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "painPoints": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "personaId": {
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "op": {
      -        "const": "persona",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "description": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "objectives": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "order": {
      -            "type": "integer"
      -          },
      -          "phaseId": {
      -            "type": "string"
      -          },
      -          "phaseType": {
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "op": {
      -        "const": "roadmap",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "name": {
      -            "description": "Or the exact taxonomy name, instead of topicId.",
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "remove": {
      -            "description": "true takes the topic off the campaign.",
      -            "type": "boolean"
      -          },
      -          "topicId": {
      -            "description": "A topicId from include.topicVocabulary of campaignstack_get_campaigns.",
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "weight": {
      -            "description": "0 to 1, default 1. Above 0.8 runs a LinkedIn search watch on the topic (at most 3 per campaign, 5 topics in all).",
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "op": {
      -        "const": "topic",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "scoreImpact": {
      -            "maximum": 100,
      -            "minimum": -100,
      -            "type": "number"
      -          },
      -          "signalType": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "signalType",
      -          "scoreImpact"
      -        ],
      -        "type": "object"
      -      },
      -      "op": {
      -        "const": "weight",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "automationId": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "enabled": {
      -            "type": "boolean"
      -          }
      -        },
      -        "required": [
      -          "automationId",
      -          "enabled"
      -        ],
      -        "type": "object"
      -      },
      -      "op": {
      -        "const": "automation",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "confirmed": {
      -        "const": true,
      -        "type": "boolean"
      -      },
      -      "icpId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "delete_icp",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "icpId",
      -      "confirmed"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "confirmed": {
      -        "const": true,
      -        "type": "boolean"
      -      },
      -      "op": {
      -        "const": "delete_persona",
      -        "type": "string"
      -      },
      -      "personaId": {
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "personaId",
      -      "confirmed"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "confirmed": {
      -        "const": true,
      -        "type": "boolean"
      -      },
      -      "op": {
      -        "const": "delete_phase",
      -        "type": "string"
      -      },
      -      "phaseId": {
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "phaseId",
      -      "confirmed"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "clientOperationId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "connectionDegreeMode": {
      +        "enum": [
      +          "discovery",
      +          "relationship"
      +        ],
      +        "type": "string"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "goal": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "offerAddendum": {
      +        "maxLength": 1500,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "outreachIntents": {
      +        "description": "An UNRANKED menu of acceptable outcomes for this outreach. Answers 'why are we writing to these people': a message with no stated purpose reads as a compliment plus an open question. The craft picks the outcome this reader and this thread can plausibly give and says the reason in its own words, and it switches when the lead's own words open another door, so order carries no meaning and listing several is how a non-buyer still gets a relevant message. Resolution is workspace then campaign then workflow, and the narrowest non-empty list REPLACES the wider ones rather than merging, so setting it here overrides the level above. Pass an empty array to clear this level and fall back.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "detail": {
      +              "description": "The workspace's own words for this outcome, e.g. '15 minutes on how you price retainers'. Required for kind='other', which has no default ask.",
      +              "type": "string"
      +            },
      +            "kind": {
      +              "enum": [
      +                "customer",
      +                "advice",
      +                "intro",
      +                "partner",
      +                "candidate",
      +                "collaboration",
      +                "investor",
      +                "other"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "kind"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "title": {
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "title",
      +      "goal"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignGuidance": {
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "connectionDegreeMode": {
      +        "enum": [
      +          "discovery",
      +          "relationship"
      +        ],
      +        "type": "string"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "offerAddendum": {
      +        "maxLength": 1500,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "outreachIntents": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/outreachIntents",
      +        "description": "An UNRANKED menu of acceptable outcomes for this outreach. Answers 'why are we writing to these people': a message with no stated purpose reads as a compliment plus an open question. The craft picks the outcome this reader and this thread can plausibly give and says the reason in its own words, and it switches when the lead's own words open another door, so order carries no meaning and listing several is how a non-buyer still gets a relevant message. Resolution is workspace then campaign then workflow, and the narrowest non-empty list REPLACES the wider ones rather than merging, so setting it here overrides the level above. Pass an empty array to clear this level and fall back."
      +      },
      +      "title": {
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "confirmed": {
      +        "const": true,
      +        "type": "boolean"
      +      },
      +      "op": {
      +        "const": "archive",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "confirmed"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "op": {
      +        "const": "unarchive",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "confirmed": {
      +        "const": true,
      +        "type": "boolean"
      +      },
      +      "op": {
      +        "const": "delete",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "confirmed"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "companySizes": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "fitStatement": {
      +            "type": "string"
      +          },
      +          "icpId": {
      +            "type": "string"
      +          },
      +          "industries": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "keywords": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "locations": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "city": {
      +                  "type": "string"
      +                },
      +                "country": {
      +                  "type": "string"
      +                },
      +                "raw": {
      +                  "type": "string"
      +                },
      +                "region": {
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "requirePersonaCoverage": {
      +            "enum": [
      +              "covered",
      +              "covered_or_hiring"
      +            ],
      +            "type": "string"
      +          },
      +          "seniorities": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "titles": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "icp",
      +        "type": "string"
      +      },
      +      "rescore": {
      +        "type": "boolean"
      +      },
      +      "rescoreLeadIds": {
      +        "items": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 100,
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "description": {
      +            "type": "string"
      +          },
      +          "fitStatement": {
      +            "type": "string"
      +          },
      +          "goals": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "icpId": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "objectionResponses": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "objection": {
      +                  "type": "string"
      +                },
      +                "response": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "objection",
      +                "response"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "objections": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "painPoints": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "personaId": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "persona",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "description": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "objectives": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "order": {
      +            "type": "integer"
      +          },
      +          "phaseId": {
      +            "type": "string"
      +          },
      +          "phaseType": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "roadmap",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "name": {
      +            "description": "Or the exact taxonomy name, instead of topicId.",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "remove": {
      +            "description": "true takes the topic off the campaign.",
      +            "type": "boolean"
      +          },
      +          "topicId": {
      +            "description": "A topicId from include.topicVocabulary of campaignstack_get_campaigns.",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "weight": {
      +            "description": "0 to 1, default 1. Above 0.8 runs a LinkedIn search watch on the topic (at most 3 per campaign, 5 topics in all).",
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "topic",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "accountIds": {
      +            "description": "LinkedIn account ids from this workspace that run the search. Omit to keep the current accounts (any available account on a new watch); pass [] to go back to any available account.",
      +            "items": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 25,
      +            "type": "array"
      +          },
      +          "enabled": {
      +            "description": "Default true: start the watch, or resume a stopped one. false stops it.",
      +            "type": "boolean"
      +          },
      +          "name": {
      +            "description": "Or the exact taxonomy name, instead of topicId.",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "topicId": {
      +            "description": "A topicId from include.topicVocabulary of campaignstack_get_campaigns. Any taxonomy topic works, including one the campaign does not carry.",
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "search_watch",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "scoreImpact": {
      +            "maximum": 100,
      +            "minimum": -100,
      +            "type": "number"
      +          },
      +          "signalType": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "signalType",
      +          "scoreImpact"
      +        ],
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "weight",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "automationId": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "enabled": {
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "automationId",
      +          "enabled"
      +        ],
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "automation",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "confirmed": {
      +        "const": true,
      +        "type": "boolean"
      +      },
      +      "icpId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "delete_icp",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "icpId",
      +      "confirmed"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "confirmed": {
      +        "const": true,
      +        "type": "boolean"
      +      },
      +      "op": {
      +        "const": "delete_persona",
      +        "type": "string"
      +      },
      +      "personaId": {
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "personaId",
      +      "confirmed"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "confirmed": {
      +        "const": true,
      +        "type": "boolean"
      +      },
      +      "op": {
      +        "const": "delete_phase",
      +        "type": "string"
      +      },
      +      "phaseId": {
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "phaseId",
      +      "confirmed"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed2 schema fields changed
    • changedInput schema / properties / operations / items / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "clientOperationId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "connectionDegreeMode": {
      -        "enum": [
      -          "discovery",
      -          "relationship"
      -        ],
      -        "type": "string"
      -      },
      -      "description": {
      -        "type": "string"
      -      },
      -      "goal": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "offerAddendum": {
      -        "maxLength": 1500,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "outreachIntents": {
      -        "description": "An UNRANKED menu of acceptable outcomes for this outreach. Answers 'why are we writing to these people': a message with no stated purpose reads as a compliment plus an open question. The craft picks the outcome this reader and this thread can plausibly give and says the reason in its own words, and it switches when the lead's own words open another door, so order carries no meaning and listing several is how a non-buyer still gets a relevant message. Resolution is workspace then campaign then workflow, and the narrowest non-empty list REPLACES the wider ones rather than merging, so setting it here overrides the level above. Pass an empty array to clear this level and fall back.",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "detail": {
      -              "description": "The workspace's own words for this outcome, e.g. '15 minutes on how you price retainers'. Required for kind='other', which has no default ask.",
      -              "type": "string"
      -            },
      -            "kind": {
      -              "enum": [
      -                "customer",
      -                "advice",
      -                "intro",
      -                "partner",
      -                "candidate",
      -                "collaboration",
      -                "investor",
      -                "other"
      -              ],
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "kind"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "title": {
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "title",
      -      "goal"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignGuidance": {
      -        "maxLength": 2000,
      -        "type": "string"
      -      },
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "connectionDegreeMode": {
      -        "enum": [
      -          "discovery",
      -          "relationship"
      -        ],
      -        "type": "string"
      -      },
      -      "description": {
      -        "type": "string"
      -      },
      -      "offerAddendum": {
      -        "maxLength": 1500,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "update",
      -        "type": "string"
      -      },
      -      "outreachIntents": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/outreachIntents",
      -        "description": "An UNRANKED menu of acceptable outcomes for this outreach. Answers 'why are we writing to these people': a message with no stated purpose reads as a compliment plus an open question. The craft picks the outcome this reader and this thread can plausibly give and says the reason in its own words, and it switches when the lead's own words open another door, so order carries no meaning and listing several is how a non-buyer still gets a relevant message. Resolution is workspace then campaign then workflow, and the narrowest non-empty list REPLACES the wider ones rather than merging, so setting it here overrides the level above. Pass an empty array to clear this level and fall back."
      -      },
      -      "title": {
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "confirmed": {
      -        "const": true,
      -        "type": "boolean"
      -      },
      -      "op": {
      -        "const": "archive",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId",
      -      "confirmed"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "op": {
      -        "const": "unarchive",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "companySizes": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "fitStatement": {
      -            "type": "string"
      -          },
      -          "icpId": {
      -            "type": "string"
      -          },
      -          "industries": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "keywords": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "locations": {
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "city": {
      -                  "type": "string"
      -                },
      -                "country": {
      -                  "type": "string"
      -                },
      -                "raw": {
      -                  "type": "string"
      -                },
      -                "region": {
      -                  "type": "string"
      -                }
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "requirePersonaCoverage": {
      -            "enum": [
      -              "covered",
      -              "covered_or_hiring"
      -            ],
      -            "type": "string"
      -          },
      -          "seniorities": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "titles": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "op": {
      -        "const": "icp",
      -        "type": "string"
      -      },
      -      "rescore": {
      -        "type": "boolean"
      -      },
      -      "rescoreLeadIds": {
      -        "items": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 100,
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "description": {
      -            "type": "string"
      -          },
      -          "fitStatement": {
      -            "type": "string"
      -          },
      -          "goals": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "icpId": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "objectionResponses": {
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "objection": {
      -                  "type": "string"
      -                },
      -                "response": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "objection",
      -                "response"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "objections": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "painPoints": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "personaId": {
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "op": {
      -        "const": "persona",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "description": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "objectives": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "order": {
      -            "type": "integer"
      -          },
      -          "phaseId": {
      -            "type": "string"
      -          },
      -          "phaseType": {
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "op": {
      -        "const": "roadmap",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "topicId": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "weight": {
      -            "maximum": 10,
      -            "minimum": 0,
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "topicId"
      -        ],
      -        "type": "object"
      -      },
      -      "op": {
      -        "const": "topic",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "campaignId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "scoreImpact": {
      -            "maximum": 100,
      -            "minimum": -100,
      -            "type": "number"
      -          },
      -          "signalType": {
      -            "minLength": 1,
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "signalType",
      -          "scoreImpact"
      -        ],
      -        "type": "object"
      -      },
      -      "op": {
      -        "const": "weight",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "campaignId",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "data": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "automationId": {
      -            "minLength": 1,
      -            "type": "string"
      -          },
      -          "enabled": {
      -            "type": "boolean"
      -          }
      -        },
      -        "required": [
      -          "automationId",
      -          "enabled"
      -        ],
      -        "type": "object"
      -      },
      -      "op": {
      -        "const": "automation",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "confirmed": {
      -        "const": true,
      -        "type": "boolean"
      -      },
      -      "icpId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "delete_icp",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "icpId",
      -      "confirmed"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "confirmed": {
      -        "const": true,
      -        "type": "boolean"
      -      },
      -      "op": {
      -        "const": "delete_persona",
      -        "type": "string"
      -      },
      -      "personaId": {
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "personaId",
      -      "confirmed"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "clientOperationId": {
      -        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      -      },
      -      "confirmed": {
      -        "const": true,
      -        "type": "boolean"
      -      },
      -      "op": {
      -        "const": "delete_phase",
      -        "type": "string"
      -      },
      -      "phaseId": {
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "phaseId",
      -      "confirmed"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "clientOperationId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "connectionDegreeMode": {
      +        "enum": [
      +          "discovery",
      +          "relationship"
      +        ],
      +        "type": "string"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "goal": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "offerAddendum": {
      +        "maxLength": 1500,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "outreachIntents": {
      +        "description": "An UNRANKED menu of acceptable outcomes for this outreach. Answers 'why are we writing to these people': a message with no stated purpose reads as a compliment plus an open question. The craft picks the outcome this reader and this thread can plausibly give and says the reason in its own words, and it switches when the lead's own words open another door, so order carries no meaning and listing several is how a non-buyer still gets a relevant message. Resolution is workspace then campaign then workflow, and the narrowest non-empty list REPLACES the wider ones rather than merging, so setting it here overrides the level above. Pass an empty array to clear this level and fall back.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "detail": {
      +              "description": "The workspace's own words for this outcome, e.g. '15 minutes on how you price retainers'. Required for kind='other', which has no default ask.",
      +              "type": "string"
      +            },
      +            "kind": {
      +              "enum": [
      +                "customer",
      +                "advice",
      +                "intro",
      +                "partner",
      +                "candidate",
      +                "collaboration",
      +                "investor",
      +                "other"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "kind"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "title": {
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "title",
      +      "goal"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignGuidance": {
      +        "maxLength": 2000,
      +        "type": "string"
      +      },
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "connectionDegreeMode": {
      +        "enum": [
      +          "discovery",
      +          "relationship"
      +        ],
      +        "type": "string"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "offerAddendum": {
      +        "maxLength": 1500,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "outreachIntents": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/outreachIntents",
      +        "description": "An UNRANKED menu of acceptable outcomes for this outreach. Answers 'why are we writing to these people': a message with no stated purpose reads as a compliment plus an open question. The craft picks the outcome this reader and this thread can plausibly give and says the reason in its own words, and it switches when the lead's own words open another door, so order carries no meaning and listing several is how a non-buyer still gets a relevant message. Resolution is workspace then campaign then workflow, and the narrowest non-empty list REPLACES the wider ones rather than merging, so setting it here overrides the level above. Pass an empty array to clear this level and fall back."
      +      },
      +      "title": {
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "confirmed": {
      +        "const": true,
      +        "type": "boolean"
      +      },
      +      "op": {
      +        "const": "archive",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "confirmed"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "op": {
      +        "const": "unarchive",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "companySizes": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "fitStatement": {
      +            "type": "string"
      +          },
      +          "icpId": {
      +            "type": "string"
      +          },
      +          "industries": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "keywords": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "locations": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "city": {
      +                  "type": "string"
      +                },
      +                "country": {
      +                  "type": "string"
      +                },
      +                "raw": {
      +                  "type": "string"
      +                },
      +                "region": {
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "requirePersonaCoverage": {
      +            "enum": [
      +              "covered",
      +              "covered_or_hiring"
      +            ],
      +            "type": "string"
      +          },
      +          "seniorities": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "titles": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "icp",
      +        "type": "string"
      +      },
      +      "rescore": {
      +        "type": "boolean"
      +      },
      +      "rescoreLeadIds": {
      +        "items": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 100,
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "description": {
      +            "type": "string"
      +          },
      +          "fitStatement": {
      +            "type": "string"
      +          },
      +          "goals": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "icpId": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "objectionResponses": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "objection": {
      +                  "type": "string"
      +                },
      +                "response": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "objection",
      +                "response"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "objections": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "painPoints": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "personaId": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "persona",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "description": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "objectives": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "order": {
      +            "type": "integer"
      +          },
      +          "phaseId": {
      +            "type": "string"
      +          },
      +          "phaseType": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "roadmap",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "name": {
      +            "description": "Or the exact taxonomy name, instead of topicId.",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "remove": {
      +            "description": "true takes the topic off the campaign.",
      +            "type": "boolean"
      +          },
      +          "topicId": {
      +            "description": "A topicId from include.topicVocabulary of campaignstack_get_campaigns.",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "weight": {
      +            "description": "0 to 1, default 1. Above 0.8 runs a LinkedIn search watch on the topic (at most 3 per campaign, 5 topics in all).",
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "topic",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "campaignId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "scoreImpact": {
      +            "maximum": 100,
      +            "minimum": -100,
      +            "type": "number"
      +          },
      +          "signalType": {
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "signalType",
      +          "scoreImpact"
      +        ],
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "weight",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "campaignId",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "data": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "automationId": {
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "enabled": {
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "automationId",
      +          "enabled"
      +        ],
      +        "type": "object"
      +      },
      +      "op": {
      +        "const": "automation",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "confirmed": {
      +        "const": true,
      +        "type": "boolean"
      +      },
      +      "icpId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "delete_icp",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "icpId",
      +      "confirmed"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "confirmed": {
      +        "const": true,
      +        "type": "boolean"
      +      },
      +      "op": {
      +        "const": "delete_persona",
      +        "type": "string"
      +      },
      +      "personaId": {
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "personaId",
      +      "confirmed"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "clientOperationId": {
      +        "$ref": "#/properties/operations/items/anyOf/0/properties/clientOperationId"
      +      },
      +      "confirmed": {
      +        "const": true,
      +        "type": "boolean"
      +      },
      +      "op": {
      +        "const": "delete_phase",
      +        "type": "string"
      +      },
      +      "phaseId": {
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "phaseId",
      +      "confirmed"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / workspaceId / description
      Previous value: -"Workspace ID. REQUIRED for a user key (csu_), which spans every workspace you belong to; omitted for a workspace key (cs_), which is bound to one and ignores this argument. campaignstack_whoami reports which kind of key you are holding and, for a user key, the workspaces it can reach."New value: +"Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too."
  3. Added

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructive=true, idempotent=false), it discloses cost implications ('can spend credits, paid provider quota, or model-backed work'), that deletes cascade and cannot be undone, that confirmed:true is required for archive/deletes, that archive does not send messages, and edge cases like a second watch returning enabled:false with a disabledReason. This is richer behavioral context than annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core operations are front-loaded, but the description is a dense, run-on block that packs cost, deletion, restore, and watch behavior into long compound sentences. Nearly every clause is informative, yet the lack of paragraphing or bullets makes it harder to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-variant polymorphic operation tool with an output schema already defined, the description covers the safety-critical operations (delete/archive confirmations, irreversibility), cost signaling, and the restore path. It is largely complete, with minor gaps in per-op field detail that the schema carries.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 33% schema description coverage, the description compensates for the most non-obvious parameters: rescore/rescoreLeadIds semantics, topic addressing by topicId or exact taxonomy name, search_watch enabled/accountIds behavior, and bounded score weights. Many nested data fields (icpId, titles, persona goals, etc.) are left to the schema, so it does not fully close the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names specific verbs (create, update, archive, unarchive, edit, delete) and the exact resources (ICP, persona, roadmap phase, topic, search watch, signal weight, automation state). It clearly distinguishes itself from read siblings like campaignstack_get_campaigns and from neighboring edit_* tools by scoping to campaign components.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete when-to-use routing: 'Use archive to stop work without deleting history', 'unarchive reverses it and needs no confirmation', and points to campaignstack_get_campaigns' guidanceHistory include for restoreVersionId. It does not, however, explicitly exclude or contrast sibling tools such as edit_workflow or edit_signal_agent, leaving some selection inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources