Skip to main content
Glama

agents_trigger_update

Update an existing AI agent trigger.

All parameters are optional — only provided fields will be updated.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
enabledNoEnable or disable this trigger. OMIT to leave the enabled flag unchanged.
agent_idYesID of the agent that owns this trigger
priorityNoTrigger priority — lower numbers run first
send_modeNoNew send mode override. OMIT to leave the send-mode unchanged.
conditionsNoNew trigger conditions (replaces existing). Same fields as trigger_create: keywords, keyword_match, channel_types, context_types, group_mode, channel_account_ids, folder_ids, ai_tag_ids, ai_filter_ids, ai_filter_mode, ai_filters: [{id: 1}, {name: "...", description: "..."}] — shorthand: reference existing by id or create inline (calls Voyage embedding API). If a filter with the same name already exists, it is reused by id. contact_states, cooldown_seconds, max_runs_per_thread_per_hour, once_per_thread (true: completes once per conversation, then the next matching trigger answers there). template: the rule_based reply — a string, or a card object {text, attachments, buttons} whose buttons each carry exactly one of value|url|web_app; a card with buttons needs send_mode auto. handoff: {agent_id, task} — rule_based owner only. After the rule's message has gone out, that agent runs on the same thread as its own trigger would, with task as the handoff brief; task may use {channel_type} and {thread_id} only. The target must be an active agentic or claude_channels agent in this workspace. incoming_call (voice pickup): answer_delay_s, plus auto_join and chat_ids for GROUP calls — auto_join true|false decides whether the bot enters on its own or the call becomes a pending invite, and OMITTING the key defers to the channel setting (trigger-when-present, then channel, then approval; absent and false are different answers). chat_ids scopes to specific Telegram groups (any id spelling) and must not be combined with channels whose calls have no chat, which never satisfy it. Conditions are REPLACED, so dropping a key clears it. calendar_event: window_minutes_before (1-1440, required), channel_account_ids, keywords, prepare_meet_join. incoming_message: action "reply_text"|"join_voice" (join requires send_mode=auto), message_source "real"|"transcript"|"both". calendar_event: run_mode "text"|"voice" (voice requires send_mode=auto). Both: voice: {speak_first, vision_mode}
thread_idsNoRestrict this trigger to specific threads (chats) by their numeric thread IDs. When set, merged into conditions.thread_filter.thread_ids. If conditions is also provided, thread_ids is merged into it. Only for incoming_message and job_completed triggers.
trigger_idYesID of the trigger to update
in_workspaceNoRun this one call in this workspace id instead of the session's. Nothing is stored; other sessions are not affected.
trigger_typeNoNew trigger type. OMIT to keep the existing type unchanged.
target_sessionNoWhich Claude Code desktop session this trigger's runs go to (name / client id / session id from workspace.desktops). Only meaningful on a claude_channels agent. Pass "" to clear it and go back to deliver-only-when-one-desktop-is-connected. Stored as conditions.target_session.
blocked_sender_idsNoNever react to these senders/callers, by their channel-side id — a phone number, a WhatsApp JID, a Telegram user id, an email address. Explicit deny: it beats every allow-list, and it applies to ALL trigger types, including incoming_call, so it is how you stop an agent answering one nuisance caller without silencing it for everybody. Phone-shaped ids are matched by their digits, so '+998901234567', '998901234567' and '998901234567@s.whatsapp.net' are the same person. Empty list [] = unblock everyone (the allow-list, if any, is left alone). Maps to conditions.sender_filter.excluded_external_ids.
excluded_thread_idsNoExclude specific threads (chats) by their numeric thread IDs — the opposite of thread_ids. When set, the trigger NEVER fires for messages in these threads (explicit deny wins). Merged into conditions.thread_filter.excluded_thread_ids. Only for incoming_message and job_completed triggers.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / in_workspace
      Added value: +{
      +  "description": "Run this one call in this workspace id instead of the session's. Nothing is stored; other sessions are not affected.",
      +  "type": "integer"
      +}
  2. Added
  3. Removed
  4. Changed1 schema field changed
    • changedInput schema / properties / trigger_type / enum
      Previous value: -[
      -  "incoming_message",
      -  "incoming_call",
      -  "schedule",
      -  "webhook",
      -  "event",
      -  "blockchain_event",
      -  "job_completed",
      -  "calendar_event"
      -]New value: +[
      +  "incoming_message",
      +  "incoming_call",
      +  "schedule",
      +  "webhook",
      +  "event",
      +  "blockchain_event",
      +  "job_completed",
      +  "calendar_event",
      +  "lead_captured"
      +]
  5. Changed2 schema fields changed
    • addedInput schema / properties / excluded_thread_ids
      Added value: +{
      +  "description": "Exclude specific threads (chats) by their numeric thread IDs — the opposite of thread_ids. When set, the trigger NEVER fires for messages in these threads (explicit deny wins). Merged into conditions.thread_filter.excluded_thread_ids. Only for incoming_message and job_completed triggers.",
      +  "items": {
      +    "type": "integer"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / thread_ids / description
      Previous value: -"Restrict this trigger to specific threads (chats) by their numeric thread IDs. When set, merged into conditions.thread_filter.thread_ids. If conditions is also provided, thread_ids is merged into it."New value: +"Restrict this trigger to specific threads (chats) by their numeric thread IDs. When set, merged into conditions.thread_filter.thread_ids. If conditions is also provided, thread_ids is merged into it. Only for incoming_message and job_completed triggers."
  6. Changed1 schema field changed
    • changedInput schema / properties / trigger_type / enum
      Previous value: -[
      -  "incoming_message",
      -  "incoming_call",
      -  "voice_transcript",
      -  "schedule",
      -  "webhook",
      -  "event",
      -  "blockchain_event",
      -  "job_completed",
      -  "calendar_event"
      -]New value: +[
      +  "incoming_message",
      +  "incoming_call",
      +  "schedule",
      +  "webhook",
      +  "event",
      +  "blockchain_event",
      +  "job_completed",
      +  "calendar_event"
      +]
  7. Changed2 schema fields changed
    • changedInput schema / properties / conditions / description
      Previous value: -"New trigger conditions (replaces existing). Same fields as trigger_create:\nkeywords, keyword_match, channel_types, context_types, group_mode,\nchannel_account_ids, folder_ids, ai_tag_ids,\nai_filter_ids, ai_filter_mode,\nai_filters: [{id: 1}, {name: \"...\", description: \"...\"}] — shorthand: reference existing by id or create inline (calls Voyage embedding API). If a filter with the same name already exists, it is reused by id.\ncontact_states, cooldown_seconds, max_runs_per_thread_per_hour"New value: +"New trigger conditions (replaces existing). Same fields as trigger_create:\nkeywords, keyword_match, channel_types, context_types, group_mode,\nchannel_account_ids, folder_ids, ai_tag_ids,\nai_filter_ids, ai_filter_mode,\nai_filters: [{id: 1}, {name: \"...\", description: \"...\"}] — shorthand: reference existing by id or create inline (calls Voyage embedding API). If a filter with the same name already exists, it is reused by id.\ncontact_states, cooldown_seconds, max_runs_per_thread_per_hour.\ncalendar_event: window_minutes_before (1-1440, required), channel_account_ids, keywords, prepare_meet_join.\nGeneric (incoming_message + calendar_event): run_mode \"text\"|\"voice\" (voice requires send_mode=auto), voice: {speak_first, vision_mode}"
    • changedInput schema / properties / trigger_type / enum
      Previous value: -[
      -  "incoming_message",
      -  "incoming_call",
      -  "voice_transcript",
      -  "schedule",
      -  "webhook",
      -  "event",
      -  "blockchain_event",
      -  "job_completed"
      -]New value: +[
      +  "incoming_message",
      +  "incoming_call",
      +  "voice_transcript",
      +  "schedule",
      +  "webhook",
      +  "event",
      +  "blockchain_event",
      +  "job_completed",
      +  "calendar_event"
      +]
  8. First observed

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so the safety profile is covered. The description adds patch semantics (unlisted fields are preserved), which is genuine behavioral value. But it omits a key hazard disclosed only in the schema — that conditions are fully REPLACED, and that thread_ids/excluded_thread_ids merge into conditions — which matters given destructiveHint=false.

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?

Two short sentences, well front-loaded: the action first, then the update semantics. Efficient, though the second sentence is partly inaccurate relative to the schema's required fields, so it does not fully earn its place.

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 12-parameter mutation tool with nested objects and no output schema, the description is minimal — the massive conditions schema does nearly all the work. It neither routes the agent away from trigger_create/delete nor warns about the destructive conditions/replacement behavior, leaving the definition only barely sufficient.

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 100% and the parameter descriptions are unusually rich (merging behavior, deny-list precedence, phone-number matching), so the schema carries the burden and baseline 3 applies. The description adds no parameter-level meaning beyond that, and its "all parameters are optional" statement is inaccurate against the required trigger_id/agent_id.

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 clear verb+resource ("Update an existing AI agent trigger") that plainly tells the agent what the tool does. However, it does no sibling differentiation — agents_trigger_create, agents_trigger_delete, and agents_update all sit nearby, and the description never distinguishes between them.

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?

"only provided fields will be updated" implies partial-update usage, but there is no explicit when-to-use vs agents_trigger_create or agents_trigger_delete, and no prerequisites or exclusions. Notably, the claim that "all parameters are optional" conflicts with the schema's two required fields (trigger_id, agent_id), which makes the usage hint misleading.

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.