Skip to main content
Glama
SetLuca

SetLuca

Official

Simulate a campaign

luca_campaigns_simulations_create

Runs a persisted dry-run campaign simulation without sending messages, so you can test campaign logic and event flows safely before launch. Provide a campaign ID and optional idempotency key.

Instructions

Run a persisted dry-run simulation without sending messages.

Luca operation: POST /api/campaigns/{id}/simulations Required scopes: campaigns:write Required OAuth scope: luca:queue_ops; data sensitivity: full_content Requires Idempotency-Key. Provide idempotencyKey for safe retries, or the server will generate one. Use workspaceId or workspaceSlug to override the default workspace configured by environment.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "id": "<id>"
    },
    "name": "luca_campaigns_simulations_create"
  }
}

Input Schema

NameRequiredDescriptionDefault
idYes
bodyNo
workspaceIdNoOptional Luca workspace id override.
workspaceSlugNoOptional Luca workspace slug override.
idempotencyKeyNoStable key for safe retries. If omitted, the MCP server generates a unique key for this call.

Output Schema

NameRequiredDescriptionDefault
resultYes
provenanceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.4.2
    • addedOutput schema / properties / result / properties / simulatedFrom
      Added value: +{
      +  "type": "string"
      +}
  2. Changed4 schema fields changedv0.4.1
    • addedInput schema / properties / body / properties / context / additionalProperties
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "object"
      +    },
      +    {
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedInput schema / properties / body / properties / eventPayload / additionalProperties
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "object"
      +    },
      +    {
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedInput schema / properties / body / properties / lead / additionalProperties
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "object"
      +    },
      +    {
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedInput schema / required
      Previous value: -[
      -  "id",
      -  "body"
      -]New value: +[
      +  "id"
      +]
  3. First observedv0.4.0

TDQS

A3.7/5.0
Behavior4/5

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

Beyond the annotations, the description discloses OAuth scopes (campaigns:write, luca:queue_ops), data sensitivity (full_content), that results are persisted, and the Idempotency-Key behavior including server-side generation. That is meaningful context a caller cannot get from readOnlyHint/destructiveHint=false. The retry-safety wording sits slightly awkwardly against idempotentHint=false, but it is reconcilable since the server only guarantees deduplication when a key is supplied.

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

Conciseness4/5

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

The purpose is front-loaded in one sentence, followed by compact metadata lines with no filler. The metadata block is slightly list-like but each line carries operational information.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, and auth/idempotency/workspace concerns are covered. However, for a tool whose core input is a nested simulation body with enums (eventType, sourceKind) and a step budget (maxSteps), leaving those semantics entirely unaddressed is a real gap in an otherwise well-documented definition.

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

Parameters2/5

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

Schema coverage is 60%, and the three top-level parameters the description touches (workspaceId, workspaceSlug, idempotencyKey) are already described in the schema almost verbatim, so little is added. The body object — lead, context, eventType, sourceKind, maxSteps, startNodeId, eventPayload, replayedEnrollmentId — is the actual substance of a simulation and receives no explanation in either the description or the schema.

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 first sentence gives a specific verb and resource ('Run a persisted dry-run simulation') plus a scope boundary ('without sending messages') that separates it from real execution siblings like luca_campaigns_enroll or luca_campaigns_publish. An agent can tell what this does without opening the schema.

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

Usage Guidelines3/5

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

Usage is implied by 'dry-run ... without sending messages', which tells the agent this is the safe testing path, and the workspace override line gives a routing rule. But there is no explicit statement of when to prefer this over luca_campaigns_comment_simulation_suite_run or luca_campaigns_simulations_get, nor any prerequisite guidance.

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

Deploy Server

Other Tools