Skip to main content
Glama

Decide review

campaignstack_decide_review
Destructive

Approve, reject, or edit-and-approve one pending review. To save a revised draft for a person to sign off instead of deciding it, use campaignstack_edit_draft. For kind workflow, an approved message goes out later, on the account's pacing (business hours, daily budget, spacing between sends), which can take hours; with priority:true it is sent within seconds instead. Use priority only when the user asked for this message to go out now, and tell them it is sending immediately. For kind job_application, approval sends or schedules the application within limits; edit_and_approve accepts updatedContent { letter?, answers?: [{ question, answer }] }, and reject may include reason. confirmed:true is required.

Input Schema

NameRequiredDescriptionDefault
kindNoThe item kind from campaignstack_get_reviews. "workflow" (default) is a drafted workflow touch; "job_application" is a job watcher application, where entryId is the application id.
reasonNoJob applications only: why the user rejected the application. Stored on the application.
entryIdYes
decisionYes
priorityNoSend in priority: approve AND send this one message within seconds, instead of waiting its turn in the queue. It skips the queue's own limits for this message (business hours, the daily budget, pacing, the weekly connection cap) but never what the account itself says (a paused, expired or risk-paused account refuses it with an error). Set it only when the user asked for this specific message to go out now. Workflow drafts on LinkedIn only; not with reject or job applications.
confirmedYesConfirms the review decision; approve/edit_and_approve can send a real message on the workflow's pacing or submit a job application.
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.
expectedTurnNoFor a conversation reply, the turn campaignstack_get_reviews returned on the item. If the lead wrote again and a newer draft replaced it, the decision is refused so you can read the new one.
updatedContentNo

Output Schema

NameRequiredDescriptionDefault
okNo
resultsNo
warningsNo
workflowIdNo
workspaceIdNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / expectedTurn
      Added value: +{
      +  "description": "For a conversation reply, the turn campaignstack_get_reviews returned on the item. If the lead wrote again and a newer draft replaced it, the decision is refused so you can read the new one.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / priority
      Added value: +{
      +  "description": "Send in priority: approve AND send this one message within seconds, instead of waiting its turn in the queue. It skips the queue's own limits for this message (business hours, the daily budget, pacing, the weekly connection cap) but never what the account itself says (a paused, expired or risk-paused account refuses it with an error). Set it only when the user asked for this specific message to go out now. Workflow drafts on LinkedIn only; not with reject or job applications.",
      +  "type": "boolean"
      +}
  3. Changed1 schema field changed
    • 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."
  4. Added

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructive/openWorld/non-idempotent, and the description adds what they cannot: approved workflow messages go out later on account pacing (hours), priority jumps the queue but still respects account states (paused/expired refused with error), and confirmed:true is mandatory because a real message or application may be submitted. No contradiction with the destructive annotation.

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?

Front-loaded with the core action and the sibling alternative first, then kind-specific detail. Dense but every clause carries operational consequence; only the kind-specific paragraph runs long and could be tightened slightly.

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 9-parameter destructive tool with an output schema, the description covers pacing, priority semantics, kind branching, confirmation, and rejection reasons. The remaining gap is what edit_and_approve's updatedContent means for the workflow kind and what a reject returns, though the output schema covers return shape.

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?

At 67% schema coverage the description earns credit for documenting the otherwise opaque updatedContent shape for job_application ({ letter?, answers?: [{question, answer}] }) and for explaining priority constraints beyond the schema text. It leaves entryId/decision and workspace resolution to the schema, which is reasonable, but the workflow-kind use of updatedContent is not addressed.

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?

States a specific verb set (approve, reject, edit-and-approve) against a precise resource (one pending review) and immediately names the sibling it is not (campaignstack_edit_draft). An agent can distinguish it from nearby review/draft tools without opening a schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: use campaignstack_edit_draft when a revised draft needs human sign-off instead of a decision. It also gives a when/when-not rule for priority (only when the user asked for immediate send, and tell them) and states that priority cannot be combined with reject or job applications.

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