Skip to main content
Glama

update_application

DestructiveIdempotent

Update application-level settings (name, active state, default language, language for everyone else, incoming-message behavior). Requires the manage_settings permission in that application. Only the fields you pass are changed; omitted fields keep their current value, so the call is idempotent. Returns the updated application.

Input Schema

NameRequiredDescriptionDefault
nameNoNew display name. Omit to leave unchanged.
isActiveNoSet false to deactivate the application — its bots stop responding. Omit to leave unchanged.
applicationIdNoApplication (workspace) id. Optional: an application-scoped key (app_...) defaults to its own application, but a personal key (usr_...) has no default and omitting it fails with MCP_APPLICATION_REQUIRED. Call list_applications to get the id.
defaultLanguageNoNew default language. It is the SOURCE language of the application's content: every block text is taken to be written in it, and translations are made from it. Any ISO 639 base language tag is accepted and normalised to its lowercase base form ("de", "pt-BR" → "pt"); a value that is not a 2-3 letter tag (for example "german") is rejected with INVALID_LANGUAGE — nothing falls back to "en". Changing it translates NOTHING: the texts already written are simply treated as written in the new language from then on, and the new default is dropped from the list of additional languages. Omit to leave unchanged.
fallbackLanguageNoLanguage for everyone else: the content language a contact gets when their own language is not one of the bot's languages (or unknown). Must be the default language or an enabled language; "" resets to the default language. Omit to leave unchanged.
incomingMessageFlowIdNoFlow of this application to run for unmatched inbound messages. Required when incomingMessageBehavior is EXECUTE_FLOW.
incomingMessageBehaviorNoWhat happens to an inbound message that matches no trigger: LIVE_CHAT routes it to a human operator, EXECUTE_FLOW runs the flow named by incomingMessageFlowId. Side effect of EXECUTE_FLOW: the platform also adds an "any message" MESSAGE trigger with originModuleKey "incoming_message_behavior" to that flow's start block, and removes it when this setting moves to another flow or back to LIVE_CHAT. It is system-owned: when you later resend that block's triggers with update_block, resend it unchanged with its id.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / incomingMessageFlowId / description
      Previous value: -"Flow to run for unmatched inbound messages. Required in practice when incomingMessageBehavior is EXECUTE_FLOW."New value: +"Flow of this application to run for unmatched inbound messages. Required when incomingMessageBehavior is EXECUTE_FLOW."
  2. Changed2 schema fields changed
    • changedInput schema / properties / defaultLanguage / description
      Previous value: -"Default language for new flows. Only \"en\", \"ru\", and \"es\" are supported; any other value falls back to \"en\"."New value: +"New default language. It is the SOURCE language of the application's content: every block text is taken to be written in it, and translations are made from it. Any ISO 639 base language tag is accepted and normalised to its lowercase base form (\"de\", \"pt-BR\" → \"pt\"); a value that is not a 2-3 letter tag (for example \"german\") is rejected with INVALID_LANGUAGE — nothing falls back to \"en\". Changing it translates NOTHING: the texts already written are simply treated as written in the new language from then on, and the new default is dropped from the list of additional languages. Omit to leave unchanged."
    • changedInput schema / properties / incomingMessageBehavior / description
      Previous value: -"What happens to an inbound message that matches no trigger: LIVE_CHAT routes it to a human operator, EXECUTE_FLOW runs the flow named by incomingMessageFlowId."New value: +"What happens to an inbound message that matches no trigger: LIVE_CHAT routes it to a human operator, EXECUTE_FLOW runs the flow named by incomingMessageFlowId. Side effect of EXECUTE_FLOW: the platform also adds an \"any message\" MESSAGE trigger with originModuleKey \"incoming_message_behavior\" to that flow's start block, and removes it when this setting moves to another flow or back to LIVE_CHAT. It is system-owned: when you later resend that block's triggers with update_block, resend it unchanged with its id."
  3. Changed1 schema field changed
    • addedInput schema / properties / fallbackLanguage
      Added value: +{
      +  "description": "Language for everyone else: the content language a contact gets when their own language is not one of the bot's languages (or unknown). Must be the default language or an enabled language; \"\" resets to the default language. Omit to leave unchanged.",
      +  "type": "string"
      +}
  4. Changed6 schema fields changed
    • addedInput schema / properties / applicationId / description
      Added value: +"Application (workspace) id. Optional: an application-scoped key (app_...) defaults to its own application, but a personal key (usr_...) has no default and omitting it fails with MCP_APPLICATION_REQUIRED. Call list_applications to get the id."
    • addedInput schema / properties / defaultLanguage / description
      Added value: +"Default language for new flows. Only \"en\", \"ru\", and \"es\" are supported; any other value falls back to \"en\"."
    • addedInput schema / properties / incomingMessageBehavior / description
      Added value: +"What happens to an inbound message that matches no trigger: LIVE_CHAT routes it to a human operator, EXECUTE_FLOW runs the flow named by incomingMessageFlowId."
    • addedInput schema / properties / incomingMessageFlowId / description
      Added value: +"Flow to run for unmatched inbound messages. Required in practice when incomingMessageBehavior is EXECUTE_FLOW."
    • addedInput schema / properties / isActive / description
      Added value: +"Set false to deactivate the application — its bots stop responding. Omit to leave unchanged."
    • addedInput schema / properties / name / description
      Added value: +"New display name. Omit to leave unchanged."
  5. Added

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=true; the description adds a permission requirement, the partial-update contract (omitted fields unchanged), and the return value. It does not explain what makes the call destructive (deactivation via isActive), but that is documented in the schema, so the marginal gap is small.

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 short sentences, front-loaded with purpose, followed by permission, mutation semantics, and return value. The parenthetical field list mildly duplicates the schema property names but earns its place as a quick scan.

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?

Covers purpose, permission, partial-update behavior, and return value; annotations and the 100%-covered schema carry the rest (per-param details, destructive semantics of deactivation). No output schema exists, but the description states what is returned, which is 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%, so all seven parameters are fully documented in the schema, including the EXECUTE_FLOW side effect and language normalization rules. The description only names the settings at a high level and adds no per-parameter meaning beyond 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?

States a specific verb (update) and resource (application-level settings) and enumerates the concrete settings covered. An agent can distinguish this from create_application/deploy_application without opening either schema.

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 clear precondition (the manage_settings permission in that application), which tells the agent when the call will succeed. It does not, however, name an alternative for creating or deploying applications, so routing guidance is context-only rather than explicit.

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.