Skip to main content
Glama

Edit a saved advert plan

soclo_host_plan_edit
Destructive

Update an imported plan against expectedRevision (read the actual revision with soclo_host_plan_state first), with the complete plan and the guides carried unchanged from prepare. An edit of a saved plan may omit the "render" design on on-screen-text cues. Spends no customer credits and makes no AI, quote, reservation, media generation or render call. When Soclo refuses a document it names the offending field in "details" — correct that field and resend; when the reply is uncertain, reconcile under the same ids with soclo_host_plan_get before another edit.

Input Schema

NameRequiredDescriptionDefault
planYes
guidesYesBy default carry the exact guides returned by prepare into import/import_selected. Soclo selected them from the brief; keep their revision and digest unchanged. An unavailable selector may return [], allowing the host to proceed.
projectIdYes
clientRequestIdNo
catalogueVersionYes
expectedRevisionYes
delegationRequestIdYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / clientRequestId / pattern
      Previous value: -"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"New value: +"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
    • changedInput schema / properties / projectId / pattern
      Previous value: -"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"New value: +"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
  2. Changed1 schema field changed
    • changedInput schema / properties / guides / description
      Previous value: -"By default carry the exact guides returned by prepare into import/import_selected. Jev selected them from the brief; keep their certified revision and whole-entry digest. An unavailable selector may return [], allowing the host to proceed."New value: +"By default carry the exact guides returned by prepare into import/import_selected. Soclo selected them from the brief; keep their revision and digest unchanged. An unavailable selector may return [], allowing the host to proceed."
  3. Changed2 schema fields changed
    • addedInput schema / definitions
      Added value: +{
      +  "s1": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "basis": {
      +        "const": "planned-scene",
      +        "type": "string"
      +      },
      +      "fromSeconds": {
      +        "description": "Scene-relative start, non-negative.",
      +        "type": "number"
      +      },
      +      "sceneSeconds": {
      +        "description": "Must equal the scene’s own seconds.",
      +        "type": "number"
      +      },
      +      "toSeconds": {
      +        "description": "Scene-relative end, later than fromSeconds and not past sceneSeconds.",
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "basis",
      +      "sceneSeconds",
      +      "fromSeconds",
      +      "toSeconds"
      +    ],
      +    "type": "object"
      +  }
      +}
    • changedInput schema / properties / plan / properties / scenes / items / properties / onScreenText / items / properties / render / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "placement": {
      -        "description": "Where and how the model should show the text in the generated shot.",
      -        "type": "string"
      -      },
      -      "timing": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "basis": {
      -            "const": "planned-scene",
      -            "type": "string"
      -          },
      -          "fromSeconds": {
      -            "description": "Scene-relative start, non-negative.",
      -            "type": "number"
      -          },
      -          "sceneSeconds": {
      -            "description": "Must equal the scene’s own seconds.",
      -            "type": "number"
      -          },
      -          "toSeconds": {
      -            "description": "Scene-relative end, later than fromSeconds and not past sceneSeconds.",
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "basis",
      -          "sceneSeconds",
      -          "fromSeconds",
      -          "toSeconds"
      -        ],
      -        "type": "object"
      -      },
      -      "version": {
      -        "const": "model-text.1",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "version",
      -      "timing",
      -      "placement"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "layout": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "baselineYN": {
      -            "type": "number"
      -          },
      -          "centerXN": {
      -            "type": "number"
      -          },
      -          "color": {
      -            "description": "Six-digit #RRGGBB.",
      -            "type": "string"
      -          },
      -          "fontSizeHeightN": {
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "centerXN",
      -          "baselineYN",
      -          "fontSizeHeightN",
      -          "color"
      -        ],
      -        "type": "object"
      -      },
      -      "motion": {
      -        "oneOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "kind": {
      -                "const": "hold",
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "kind"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "completeAtSeconds": {
      -                "type": "number"
      -              },
      -              "kind": {
      -                "const": "word-reveal",
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "kind",
      -              "completeAtSeconds"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "kind": {
      -                "const": "pop",
      -                "type": "string"
      -              },
      -              "peakAfterSeconds": {
      -                "type": "number"
      -              },
      -              "peakScale": {
      -                "type": "number"
      -              },
      -              "revealAtSeconds": {
      -                "type": "number"
      -              },
      -              "settleAfterSeconds": {
      -                "type": "number"
      -              },
      -              "startScale": {
      -                "type": "number"
      -              },
      -              "target": {
      -                "enum": [
      -                  "whole-cue",
      -                  "last-word"
      -                ],
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "kind",
      -              "target",
      -              "revealAtSeconds",
      -              "peakAfterSeconds",
      -              "settleAfterSeconds",
      -              "startScale",
      -              "peakScale"
      -            ],
      -            "type": "object"
      -          }
      -        ]
      -      },
      -      "timing": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "basis": {
      -            "const": "planned-scene",
      -            "type": "string"
      -          },
      -          "fromSeconds": {
      -            "description": "Scene-relative start, non-negative.",
      -            "type": "number"
      -          },
      -          "sceneSeconds": {
      -            "description": "Must equal the scene’s own seconds.",
      -            "type": "number"
      -          },
      -          "toSeconds": {
      -            "description": "Scene-relative end, later than fromSeconds and not past sceneSeconds.",
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "basis",
      -          "sceneSeconds",
      -          "fromSeconds",
      -          "toSeconds"
      -        ],
      -        "type": "object"
      -      },
      -      "version": {
      -        "const": "caption-design.1",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "version",
      -      "timing",
      -      "layout",
      -      "motion"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "placement": {
      +        "description": "Where and how the model should show the text in the generated shot.",
      +        "type": "string"
      +      },
      +      "timing": {
      +        "$ref": "#/definitions/s1"
      +      },
      +      "version": {
      +        "const": "model-text.1",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "version",
      +      "timing",
      +      "placement"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "layout": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "baselineYN": {
      +            "type": "number"
      +          },
      +          "centerXN": {
      +            "type": "number"
      +          },
      +          "color": {
      +            "description": "Six-digit #RRGGBB.",
      +            "type": "string"
      +          },
      +          "fontSizeHeightN": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "centerXN",
      +          "baselineYN",
      +          "fontSizeHeightN",
      +          "color"
      +        ],
      +        "type": "object"
      +      },
      +      "motion": {
      +        "oneOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "kind": {
      +                "const": "hold",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "kind"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "completeAtSeconds": {
      +                "type": "number"
      +              },
      +              "kind": {
      +                "const": "word-reveal",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "kind",
      +              "completeAtSeconds"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "kind": {
      +                "const": "pop",
      +                "type": "string"
      +              },
      +              "peakAfterSeconds": {
      +                "type": "number"
      +              },
      +              "peakScale": {
      +                "type": "number"
      +              },
      +              "revealAtSeconds": {
      +                "type": "number"
      +              },
      +              "settleAfterSeconds": {
      +                "type": "number"
      +              },
      +              "startScale": {
      +                "type": "number"
      +              },
      +              "target": {
      +                "enum": [
      +                  "whole-cue",
      +                  "last-word"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "kind",
      +              "target",
      +              "revealAtSeconds",
      +              "peakAfterSeconds",
      +              "settleAfterSeconds",
      +              "startScale",
      +              "peakScale"
      +            ],
      +            "type": "object"
      +          }
      +        ]
      +      },
      +      "timing": {
      +        "$ref": "#/definitions/s1"
      +      },
      +      "version": {
      +        "const": "caption-design.1",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "version",
      +      "timing",
      +      "layout",
      +      "motion"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. First observed

TDQS

A3.8/5.0
Behavior4/5

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

Adds real value beyond the annotations by disclosing cost and side-effect profile ('spends no customer credits and makes no AI, quote, reservation, media generation or render call'), which is exactly the kind of context destructiveHint=true does not convey. It also documents the refusal payload shape ('details' names the offending field) and the uncertainty/reconciliation procedure.

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?

Four sentences, front-loaded with the action and the revision precondition, with no filler. The middle sentences are dense and borderline run-on (the whole-plan/guides clause), but every sentence carries operational content.

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?

For a deeply nested 7-parameter mutation with no output schema and 14% schema coverage, the description covers workflow, cost, and error recovery well but leaves the plan document's structural expectations largely implicit. An agent would still need the schema to know what a valid 'complete plan' looks like and what the auxiliary ids must be.

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

Parameters3/5

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

Schema description coverage is only 14%, so the description must carry the burden; it explains expectedRevision, the need for the complete plan, carrying guides unchanged from prepare, and the relaxed 'render' requirement on saved cues. It says nothing about projectId, delegationRequestId, catalogueVersion, or clientRequestId, leaving four of seven parameters to name inference alone.

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

Purpose4/5

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

States a specific verb and resource ('Update an imported plan against expectedRevision') and implicitly distinguishes itself from soclo_host_plan_import/prepare by naming the prior read via soclo_host_plan_state. It does not explicitly name the sibling tool it supersedes, but an agent can tell this is the mutation counterpart to import.

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?

Gives a concrete precondition (read the actual revision with soclo_host_plan_state first) and explicit recovery paths: correct the field named in 'details' and resend, or reconcile with soclo_host_plan_get when the reply is uncertain. It stops short of saying when to prefer a re-import over an edit.

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