Skip to main content
Glama

Change publication status, vacancy lifecycle or embedding

set_interview_state
DestructiveIdempotent

[Interviews] Change an interview's or position's publication status (draft, active, archived...), or a position's vacancy lifecycle (open, applications_closed, on_hold, filled, cancelled, closed) with an optional reason_id and note, or its embed key (is_embedded). Moving a position to filled, cancelled or closed, or archiving it, e-mails every candidate whose application is still open, when the company has the position-closed notice on. on_hold and cancelled need a reason_id: one of the company's position status reasons from list_reasons type=position_status, whose applies_to has the lifecycle. dry_run=true answers the status change and whether the position-closed e-mail would go out, to how many candidates, without changing anything. A deleted interview can no longer be read or updated; an archived one can. is_embedded=false removes the embed keys, so existing embeds stop working.

Every argument in full, with examples: get_tool_reference.

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": {
      "position_id": "<position_id>"
    },
    "name": "set_interview_state"
  }
}

Input Schema

NameRequiredDescriptionDefault
noteNoWith lifecycle: a note kept in the position's status history (at most 1000 characters).
statusNoNew publication status. Refused (422) for the AI interview step of a position, which follows its position, and for activating a position whose required custom fields are empty. Archiving an active position can e-mail its candidates with open applications (the position-closed notice, when switched on). A deleted interview can no longer be read or updated; an archived one can. preparing (a draft still being prepared) and completed (finished, read as closed) are normally set by the platform; filling or closing a position is `lifecycle`.
dry_runNotrue: change nothing; answer the status before and after and whether the position-closed e-mail would go out, to how many candidates. It does not check whether the move is allowed: the real call can still refuse it.
lifecycleNoMulti-stage positions only: the vacancy lifecycle to move to. draft goes to open or cancelled; open, applications_closed and on_hold go to each other or to filled, cancelled or closed; those three go back to open. on_hold and cancelled need reason_id. filled, cancelled and closed archive the position and can e-mail every candidate with an open application (the position-closed notice, when switched on). Needs the position_lifecycle feature (403 otherwise). Send either status or lifecycle, not both. A stand-alone interview has no lifecycle: close it with status archived. open, applications_closed and on_hold e-mail no one.
llm_modelNoYour model id, e.g. "claude-opus-4-8"; "unknown" if unsure. For analytics.
reason_idNoWith lifecycle: a position status reason of the company that applies to the target lifecycle (an id from list_reasons with type position_status).
is_embeddedNoControls iframe embedding of the interview on an external page. A signed coaching embed (name, email, signature) signs the visitor in as a learner of that portal, and the session is charged to the merchant's interview credits on completion, not to the learner's coaching credits; it cannot start while the merchant has none.
position_idYesInterview definition id (an interview `id` from list_interviews) or position id (a position `id` from list_interviews) whose state should change.
conversation_idNoThe conversation_id this server returned earlier in this conversation, unchanged, including after later user messages. Omit it if you have none. Recorded for the server developer's analytics.

Output Schema

NameRequiredDescriptionDefault
resultYes
_mcp_instructionsNoServer-issued metadata for this conversation.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / status / description
      Previous value: -"New publication status. Refused (422) for the AI interview step of a position, which follows its position, and for activating a position whose required custom fields are empty. Archiving an active position can e-mail its candidates with open applications (the position-closed notice, when switched on). Prefer `archived` to `deleted`: a deleted interview can no longer be read or updated. preparing (a draft still being prepared) and completed (finished, read as closed) are normally set by the platform; to fill or close a position use lifecycle."New value: +"New publication status. Refused (422) for the AI interview step of a position, which follows its position, and for activating a position whose required custom fields are empty. Archiving an active position can e-mail its candidates with open applications (the position-closed notice, when switched on). A deleted interview can no longer be read or updated; an archived one can. preparing (a draft still being prepared) and completed (finished, read as closed) are normally set by the platform; filling or closing a position is `lifecycle`."
  2. Changed8 schema fields changed
    • addedInput schema / properties / dry_run
      Added value: +{
      +  "description": "true: change nothing; answer the status before and after and whether the position-closed e-mail would go out, to how many candidates. It does not check whether the move is allowed: the real call can still refuse it.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / lifecycle / description
      Previous value: -"Multi-stage positions only (422 for an interview): the vacancy lifecycle to move to (needs the position lifecycle switch of the company, else 403). Allowed moves: draft to open or cancelled; open, applications_closed and on_hold to each other and to filled, cancelled or closed; filled, cancelled and closed back to open (else 422). Moving an open position to filled, cancelled or closed archives it: when the company has the position-closed notice switched on, every candidate with an open application then gets the position-closed e-mail (at once or on the company's e-mail schedule)."New value: +"Multi-stage positions only: the vacancy lifecycle to move to. draft goes to open or cancelled; open, applications_closed and on_hold go to each other or to filled, cancelled or closed; those three go back to open. on_hold and cancelled need reason_id. filled, cancelled and closed archive the position and can e-mail every candidate with an open application (the position-closed notice, when switched on). Needs the position_lifecycle feature (403 otherwise). Send either status or lifecycle, not both. A stand-alone interview has no lifecycle: close it with status archived. open, applications_closed and on_hold e-mail no one."
    • removedInput schema / properties / lifecycle / x-mcp-description
      Removed value: -"Multi-stage positions only: the vacancy lifecycle to move to. draft goes to open or cancelled; open, applications_closed and on_hold go to each other or to filled, cancelled or closed; those three go back to open. on_hold and cancelled need reason_id. filled, cancelled and closed archive the position and can e-mail every candidate with an open application (the position-closed notice, when switched on)."
    • changedInput schema / properties / position_id / description
      Previous value: -"Interview definition id (interview_def_set.id) or position id (position_def_set.id) whose state should change."New value: +"Interview definition id (an interview `id` from list_interviews) or position id (a position `id` from list_interviews) whose state should change."
    • changedInput schema / properties / reason_id / description
      Previous value: -"With lifecycle: a position status reason of the company (merchant_taxonomy.id, type position_status_reason) that applies to the target lifecycle."New value: +"With lifecycle: a position status reason of the company that applies to the target lifecycle (an id from list_reasons with type position_status)."
    • changedInput schema / properties / status / description
      Previous value: -"New publication status (type_interview_status): draft, active, archived, deleted, preparing, completed. Refused (422) for the AI interview step of a position (visibility sub_item), which follows its position. Activating a position whose required custom fields are empty is refused with 422 (name custom_fields). Archiving an active position sends the position-closed e-mail to candidates with open applications when the company has that notice switched on."New value: +"New publication status. Refused (422) for the AI interview step of a position, which follows its position, and for activating a position whose required custom fields are empty. Archiving an active position can e-mail its candidates with open applications (the position-closed notice, when switched on). Prefer `archived` to `deleted`: a deleted interview can no longer be read or updated. preparing (a draft still being prepared) and completed (finished, read as closed) are normally set by the platform; to fill or close a position use lifecycle."
    • removedInput schema / properties / status / x-mcp-description
      Removed value: -"New publication status. Refused (422) for the AI interview step of a position, which follows its position, and for activating a position whose required custom fields are empty. Archiving an active position can e-mail its candidates with open applications (the position-closed notice, when switched on). Prefer `archived` to `deleted`: a deleted interview can no longer be read or updated."
    • changedOutput schema / properties / result / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "lifecycle": {
      -        "properties": {
      -          "note": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "publication_status": {
      -            "enum": [
      -              "draft",
      -              "active",
      -              "archived",
      -              "deleted",
      -              "preparing",
      -              "completed",
      -              null
      -            ],
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "reason": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "status": {
      -            "enum": [
      -              "open",
      -              "applications_closed",
      -              "on_hold",
      -              "filled",
      -              "cancelled",
      -              "closed",
      -              null
      -            ],
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          }
      -        },
      -        "required": [
      -          "status",
      -          "publication_status",
      -          "reason",
      -          "note"
      -        ],
      -        "type": "object"
      -      },
      -      "success": {
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "success"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "embed_id": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "embed_signing_key": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "lifecycle": {
      -        "properties": {
      -          "note": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "publication_status": {
      -            "enum": [
      -              "draft",
      -              "active",
      -              "archived",
      -              "deleted",
      -              "preparing",
      -              "completed",
      -              null
      -            ],
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "reason": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "status": {
      -            "enum": [
      -              "open",
      -              "applications_closed",
      -              "on_hold",
      -              "filled",
      -              "cancelled",
      -              "closed",
      -              null
      -            ],
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          }
      -        },
      -        "required": [
      -          "status",
      -          "publication_status",
      -          "reason",
      -          "note"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "embed_id",
      -      "embed_signing_key"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "lifecycle": {
      +        "properties": {
      +          "note": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "publication_status": {
      +            "enum": [
      +              "draft",
      +              "active",
      +              "archived",
      +              "deleted",
      +              "preparing",
      +              "completed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "reason": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "enum": [
      +              "open",
      +              "applications_closed",
      +              "on_hold",
      +              "filled",
      +              "cancelled",
      +              "closed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "status",
      +          "publication_status",
      +          "reason",
      +          "note"
      +        ],
      +        "type": "object"
      +      },
      +      "success": {
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "success"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "embed_id": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "embed_signing_key": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "lifecycle": {
      +        "properties": {
      +          "note": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "publication_status": {
      +            "enum": [
      +              "draft",
      +              "active",
      +              "archived",
      +              "deleted",
      +              "preparing",
      +              "completed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "reason": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "enum": [
      +              "open",
      +              "applications_closed",
      +              "on_hold",
      +              "filled",
      +              "cancelled",
      +              "closed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "status",
      +          "publication_status",
      +          "reason",
      +          "note"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "embed_id",
      +      "embed_signing_key"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "close_notice": {
      +        "properties": {
      +          "candidates": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "schedule_mode": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "sent": {
      +            "type": [
      +              "boolean",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "sent",
      +          "candidates"
      +        ],
      +        "type": [
      +          "object",
      +          "null"
      +        ]
      +      },
      +      "dry_run": {
      +        "enum": [
      +          true,
      +          null
      +        ],
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "status_from": {
      +        "enum": [
      +          "draft",
      +          "active",
      +          "archived",
      +          "deleted",
      +          "preparing",
      +          "completed",
      +          null
      +        ],
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "status_to": {
      +        "enum": [
      +          "draft",
      +          "active",
      +          "archived",
      +          "deleted",
      +          "preparing",
      +          "completed",
      +          null
      +        ],
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "dry_run",
      +      "status_from",
      +      "status_to",
      +      "close_notice"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed3 schema fields changed
    • changedInput schema / properties / lifecycle / description
      Previous value: -"Multi-stage positions only (422 for an interview): the vacancy lifecycle to move to, through merchant_definition_lifecycle_set (switch position_lifecycle, else 403). Allowed moves: draft to open or cancelled; open, applications_closed and on_hold to each other and to filled, cancelled or closed; filled, cancelled and closed back to open (else 422). Moving an open position to filled, cancelled or closed archives it: when the company has the position-closed notice switched on, every candidate with an open application then gets the position-closed e-mail (at once or on the company's e-mail schedule)."New value: +"Multi-stage positions only (422 for an interview): the vacancy lifecycle to move to (needs the position lifecycle switch of the company, else 403). Allowed moves: draft to open or cancelled; open, applications_closed and on_hold to each other and to filled, cancelled or closed; filled, cancelled and closed back to open (else 422). Moving an open position to filled, cancelled or closed archives it: when the company has the position-closed notice switched on, every candidate with an open application then gets the position-closed e-mail (at once or on the company's e-mail schedule)."
    • addedInput schema / properties / lifecycle / x-mcp-description
      Added value: +"Multi-stage positions only: the vacancy lifecycle to move to. draft goes to open or cancelled; open, applications_closed and on_hold go to each other or to filled, cancelled or closed; those three go back to open. on_hold and cancelled need reason_id. filled, cancelled and closed archive the position and can e-mail every candidate with an open application (the position-closed notice, when switched on)."
    • addedInput schema / properties / status / x-mcp-description
      Added value: +"New publication status. Refused (422) for the AI interview step of a position, which follows its position, and for activating a position whose required custom fields are empty. Archiving an active position can e-mail its candidates with open applications (the position-closed notice, when switched on). Prefer `archived` to `deleted`: a deleted interview can no longer be read or updated."
  4. Changed8 schema fields changed
    • changedInput schema / properties / is_embedded / description
      Previous value: -"Controls iframe embedding of the interview on an external page. When true, ensures an embed key exists (returns embed_id/embed_signing_key, used to authenticate/sign the iframe embed). When false, removes the embed keys (disables embedding). Where it runs depends on the type: interviews, assessments and interview role-plays embed on the interview portal (`https://<interview portal domain>/embed?embed_id=...`); coaching sessions and coaching personas embed on the consumer (coaching) portal (`https://<coaching portal domain>/embed?embed_id=...`, a link built on the interview portal is forwarded there). A signed coaching embed (name, email, signature) signs the visitor in as a learner of that portal, and the session is charged to the merchant's interview credits on completion, not to the learner's coaching credits; it cannot start while the merchant has none."New value: +"Controls iframe embedding of the interview on an external page. A signed coaching embed (name, email, signature) signs the visitor in as a learner of that portal, and the session is charged to the merchant's interview credits on completion, not to the learner's coaching credits; it cannot start while the merchant has none."
    • changedInput schema / properties / lifecycle / description
      Previous value: -"Multi-stage positions only (422 for an interview): the vacancy lifecycle to move to, through merchant_definition_lifecycle_set (switch position_lifecycle, else 403). Allowed moves: draft to open or cancelled; open, applications_closed and on_hold to each other and to filled, cancelled or closed; filled, cancelled and closed back to open (else 422). on_hold and cancelled need a reason_id. The publication status follows (open, applications_closed, on_hold = active; filled, cancelled, closed = archived). Moving an open position to filled, cancelled or closed archives it: when the company has the position-closed notice switched on, every candidate with an open application then gets the position-closed e-mail (at once or on the company's e-mail schedule). Send either status or lifecycle, not both."New value: +"Multi-stage positions only (422 for an interview): the vacancy lifecycle to move to, through merchant_definition_lifecycle_set (switch position_lifecycle, else 403). Allowed moves: draft to open or cancelled; open, applications_closed and on_hold to each other and to filled, cancelled or closed; filled, cancelled and closed back to open (else 422). Moving an open position to filled, cancelled or closed archives it: when the company has the position-closed notice switched on, every candidate with an open application then gets the position-closed e-mail (at once or on the company's e-mail schedule)."
    • removedInput schema / properties / lifecycle / example
      Removed value: -"on_hold"
    • addedInput schema / properties / llm_model
      Added value: +{
      +  "description": "Your model id, e.g. \"claude-opus-4-8\"; \"unknown\" if unsure. For analytics.",
      +  "type": "string"
      +}
    • removedInput schema / properties / position_id / example
      Removed value: -"00000000-0000-0000-0000-000000000000"
    • changedInput schema / properties / status / description
      Previous value: -"New publication status (type_interview_status): draft, active, archived, deleted, preparing, completed. For a position it cascades to its steps. Refused (422) for the AI interview step of a position (visibility sub_item), which follows its position. Activating a position whose required custom fields are empty is refused with 422 (name custom_fields). Archiving an active position sends the position-closed e-mail to candidates with open applications when the company has that notice switched on."New value: +"New publication status (type_interview_status): draft, active, archived, deleted, preparing, completed. Refused (422) for the AI interview step of a position (visibility sub_item), which follows its position. Activating a position whose required custom fields are empty is refused with 422 (name custom_fields). Archiving an active position sends the position-closed e-mail to candidates with open applications when the company has that notice switched on."
    • changedOutput schema / properties / result / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "lifecycle": {
      -        "description": "The lifecycle after the change; only when lifecycle was sent.",
      -        "properties": {
      -          "note": {
      -            "description": "The note kept.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "publication_status": {
      -            "description": "The publication status now (type_interview_status).",
      -            "enum": [
      -              "draft",
      -              "active",
      -              "archived",
      -              "deleted",
      -              "preparing",
      -              "completed",
      -              null
      -            ],
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "reason": {
      -            "description": "Label of the reason given.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "status": {
      -            "description": "The vacancy lifecycle now.",
      -            "enum": [
      -              "open",
      -              "applications_closed",
      -              "on_hold",
      -              "filled",
      -              "cancelled",
      -              "closed",
      -              null
      -            ],
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          }
      -        },
      -        "required": [
      -          "status",
      -          "publication_status",
      -          "reason",
      -          "note"
      -        ],
      -        "type": "object"
      -      },
      -      "success": {
      -        "description": "True when the change was applied.",
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "success"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "embed_id": {
      -        "description": "Embed id (interview_embed.id).",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "embed_signing_key": {
      -        "description": "Key that signs the embed link.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "lifecycle": {
      -        "description": "The lifecycle after the change; only when lifecycle was sent.",
      -        "properties": {
      -          "note": {
      -            "description": "The note kept.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "publication_status": {
      -            "description": "The publication status now (type_interview_status).",
      -            "enum": [
      -              "draft",
      -              "active",
      -              "archived",
      -              "deleted",
      -              "preparing",
      -              "completed",
      -              null
      -            ],
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "reason": {
      -            "description": "Label of the reason given.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "status": {
      -            "description": "The vacancy lifecycle now.",
      -            "enum": [
      -              "open",
      -              "applications_closed",
      -              "on_hold",
      -              "filled",
      -              "cancelled",
      -              "closed",
      -              null
      -            ],
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          }
      -        },
      -        "required": [
      -          "status",
      -          "publication_status",
      -          "reason",
      -          "note"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "embed_id",
      -      "embed_signing_key"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "lifecycle": {
      +        "properties": {
      +          "note": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "publication_status": {
      +            "enum": [
      +              "draft",
      +              "active",
      +              "archived",
      +              "deleted",
      +              "preparing",
      +              "completed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "reason": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "enum": [
      +              "open",
      +              "applications_closed",
      +              "on_hold",
      +              "filled",
      +              "cancelled",
      +              "closed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "status",
      +          "publication_status",
      +          "reason",
      +          "note"
      +        ],
      +        "type": "object"
      +      },
      +      "success": {
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "success"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "embed_id": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "embed_signing_key": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "lifecycle": {
      +        "properties": {
      +          "note": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "publication_status": {
      +            "enum": [
      +              "draft",
      +              "active",
      +              "archived",
      +              "deleted",
      +              "preparing",
      +              "completed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "reason": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "enum": [
      +              "open",
      +              "applications_closed",
      +              "on_hold",
      +              "filled",
      +              "cancelled",
      +              "closed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "status",
      +          "publication_status",
      +          "reason",
      +          "note"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "embed_id",
      +      "embed_signing_key"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedOutput schema / properties / result / description
      Removed value: -"Returns `{ embed_id, embed_signing_key }` when an embed key was created/returned (is_embedded=true), otherwise `{ success: true }`; either carries `lifecycle` when lifecycle was sent."
  5. Changed7 schema fields changed
    • addedInput schema / properties / lifecycle
      Added value: +{
      +  "description": "Multi-stage positions only (422 for an interview): the vacancy lifecycle to move to, through merchant_definition_lifecycle_set (switch position_lifecycle, else 403). Allowed moves: draft to open or cancelled; open, applications_closed and on_hold to each other and to filled, cancelled or closed; filled, cancelled and closed back to open (else 422). on_hold and cancelled need a reason_id. The publication status follows (open, applications_closed, on_hold = active; filled, cancelled, closed = archived). Moving an open position to filled, cancelled or closed archives it: when the company has the position-closed notice switched on, every candidate with an open application then gets the position-closed e-mail (at once or on the company's e-mail schedule). Send either status or lifecycle, not both.",
      +  "enum": [
      +    "open",
      +    "applications_closed",
      +    "on_hold",
      +    "filled",
      +    "cancelled",
      +    "closed"
      +  ],
      +  "example": "on_hold",
      +  "type": "string"
      +}
    • addedInput schema / properties / note
      Added value: +{
      +  "description": "With lifecycle: a note kept in the position's status history (at most 1000 characters).",
      +  "maxLength": 1000,
      +  "type": "string"
      +}
    • changedInput schema / properties / position_id / description
      Previous value: -"Interview definition id or position id whose state should change."New value: +"Interview definition id (interview_def_set.id) or position id (position_def_set.id) whose state should change."
    • addedInput schema / properties / reason_id
      Added value: +{
      +  "description": "With lifecycle: a position status reason of the company (merchant_taxonomy.id, type position_status_reason) that applies to the target lifecycle.",
      +  "format": "uuid",
      +  "type": "string"
      +}
    • changedInput schema / properties / status / description
      Previous value: -"New lifecycle status to apply."New value: +"New publication status (type_interview_status): draft, active, archived, deleted, preparing, completed. For a position it cascades to its steps. Refused (422) for the AI interview step of a position (visibility sub_item), which follows its position. Activating a position whose required custom fields are empty is refused with 422 (name custom_fields). Archiving an active position sends the position-closed e-mail to candidates with open applications when the company has that notice switched on."
    • changedOutput schema / properties / result / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "success": {
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "success"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "embed_id": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "embed_signing_key": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "embed_id",
      -      "embed_signing_key"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "lifecycle": {
      +        "description": "The lifecycle after the change; only when lifecycle was sent.",
      +        "properties": {
      +          "note": {
      +            "description": "The note kept.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "publication_status": {
      +            "description": "The publication status now (type_interview_status).",
      +            "enum": [
      +              "draft",
      +              "active",
      +              "archived",
      +              "deleted",
      +              "preparing",
      +              "completed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "reason": {
      +            "description": "Label of the reason given.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "description": "The vacancy lifecycle now.",
      +            "enum": [
      +              "open",
      +              "applications_closed",
      +              "on_hold",
      +              "filled",
      +              "cancelled",
      +              "closed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "status",
      +          "publication_status",
      +          "reason",
      +          "note"
      +        ],
      +        "type": "object"
      +      },
      +      "success": {
      +        "description": "True when the change was applied.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "success"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "embed_id": {
      +        "description": "Embed id (interview_embed.id).",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "embed_signing_key": {
      +        "description": "Key that signs the embed link.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "lifecycle": {
      +        "description": "The lifecycle after the change; only when lifecycle was sent.",
      +        "properties": {
      +          "note": {
      +            "description": "The note kept.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "publication_status": {
      +            "description": "The publication status now (type_interview_status).",
      +            "enum": [
      +              "draft",
      +              "active",
      +              "archived",
      +              "deleted",
      +              "preparing",
      +              "completed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "reason": {
      +            "description": "Label of the reason given.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "description": "The vacancy lifecycle now.",
      +            "enum": [
      +              "open",
      +              "applications_closed",
      +              "on_hold",
      +              "filled",
      +              "cancelled",
      +              "closed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "status",
      +          "publication_status",
      +          "reason",
      +          "note"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "embed_id",
      +      "embed_signing_key"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedOutput schema / properties / result / description
      Previous value: -"Returns `{ embed_id, embed_signing_key }` when an embed key was created/returned (is_embedded=true), otherwise `{ success: true }`."New value: +"Returns `{ embed_id, embed_signing_key }` when an embed key was created/returned (is_embedded=true), otherwise `{ success: true }`; either carries `lifecycle` when lifecycle was sent."
  6. Changed2 schema fields changed
    • changedInput schema / properties / conversation_id / description
      Previous value: -"Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."New value: +"The conversation_id this server returned earlier in this conversation, unchanged, including after later user messages. Omit it if you have none. Recorded for the server developer's analytics."
    • changedInput schema / properties / position_id / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
  7. Changed1 schema field changed
    • changedInput schema / properties / is_embedded / description
      Previous value: -"Controls iframe embedding of the interview on an external page. When true, ensures an embed key exists (returns embed_id/embed_signing_key, used to authenticate/sign the iframe embed). When false, removes the embed keys (disables embedding)."New value: +"Controls iframe embedding of the interview on an external page. When true, ensures an embed key exists (returns embed_id/embed_signing_key, used to authenticate/sign the iframe embed). When false, removes the embed keys (disables embedding). Where it runs depends on the type: interviews, assessments and interview role-plays embed on the interview portal (`https://<interview portal domain>/embed?embed_id=...`); coaching sessions and coaching personas embed on the consumer (coaching) portal (`https://<coaching portal domain>/embed?embed_id=...`, a link built on the interview portal is forwarded there). A signed coaching embed (name, email, signature) signs the visitor in as a learner of that portal, and the session is charged to the merchant's interview credits on completion, not to the learner's coaching credits; it cannot start while the merchant has none."
  8. Changed1 schema field changed
    • changedInput schema / properties / conversation_id / description
      Previous value: -"Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it."New value: +"Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request."
  9. Changed2 schema fields changed
    • addedInput schema / properties / conversation_id
      Added value: +{
      +  "description": "Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / _mcp_instructions
      Added value: +{
      +  "description": "Server-issued metadata for this conversation.",
      +  "properties": {
      +    "conversation_id": {
      +      "description": "The server-issued conversation identifier.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  10. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations (destructive, idempotent, open-world), the description discloses the side effects that matter: filled/cancelled/closed or archiving e-mails every candidate with an open application when the position-closed notice is on, is_embedded=false breaks existing embed keys, deleted interviews become unreadable, and dry_run does not validate legality. The only gap is that the dry_run note is repeated from the schema rather than adding new information, and it doesn't say what the response looks like beyond dry_run.

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?

It is front-loaded and the most actionable rules come first, but the prose is dense and repeats itself: the position-closed e-mail behavior and the deleted/archived interview rule appear in both the description and the status/lifecycle property descriptions. The trailing get_tool_reference pointer earns its place, but several clauses could be trimmed.

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

Completeness5/5

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

For a destructive, multi-mode mutation with nine parameters, the description covers the required conditions, side effects, prerequisites, preview mode, and where to find the enumerated reasons. With an output schema present, no return-value explanation is needed, and nothing an agent needs in order to call this safely is missing.

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?

Schema coverage is already 100%, so the baseline would be 3, but the description adds cross-field semantics the schema states only per-property: the mutual exclusivity of status and lifecycle, and the dependency of reason_id on list_reasons with a matching applies_to. That routing information materially helps the agent construct valid arguments.

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?

The description opens with a specific verb and resource set: change an interview's or position's publication `status`, a position's vacancy `lifecycle`, or its embed key. The three modes are enumerated and the enum values are named, so the agent knows exactly what the tool mutates. It stops short of naming the nearest sibling (update_interview) as the alternative for other edits, so differentiation is strong but not complete.

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?

Explicit routing rules are given: send either `status` or `lifecycle`, not both; a stand-alone interview has no lifecycle and must be closed with status archived; on_hold and cancelled require a reason_id drawn from list_reasons type=position_status whose applies_to matches; dry_run previews without changing anything. It also names the failure conditions (403 without position_lifecycle, 422 for AI interview steps) that tell the agent when not to call.

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.