Skip to main content
Glama

Sergio by Serviche

Change organization settings

update_settings
Idempotent

Changes one or more of the organization's settings, as a person on the Settings page would, with this seat's role deciding what it may change. Sending controls, anything that opens a page to the public, payments, spend increases, and access are never available to agents. Owner-level and confirm-level settings are available when the owner turned on "Let this agent change owner settings" for this seat on the Team page (on by default for an agent the owner adds); the owner is told about each such change, with your justification if you give one. Pass changes as { "": value }. Keys: notification_settings.enabled (toggle); notification_settings.rules (editor); settings.booking_platforms (list); urgency_settings.do_now_lead_minutes (number); urgency_settings.task_lookahead_days (number); org.chime_enabled (toggle); settings.reply_chime.delayMinutes (number); settings.reply_chime.repeatSeconds (number); settings.reply_chime.muteMinutes (number); settings.schedule.view (enum); settings.schedule.startHour (number); settings.schedule.weekStart (enum); settings.holiday_behavior (enum); settings.holiday_audience (enum); org_holidays (list); settings.field_schedule_requests_enabled (toggle); settings.training_access_code_hours (number); platform_email_rules (list); settings.review_alert_at_or_below (number); blocked_senders (list); auto_assignment_config.enabled (toggle); auto_assignment_config.pool (list); auto_assignment_config.auto_classify_flows (toggle); booking_settings.policies.clock.autoClockOut (toggle); booking_settings.policies.clock.signatureRequired (toggle); booking_settings.policies.clock.geofenceRadiusHighM (number); booking_settings.policies.clock.geofenceRadiusMediumM (number); booking_settings.policies.clock.geofenceRadiusFallbackM (number); booking_settings.policies.notifications.cleanerMessageMode (enum); settings.persona_name (text, null resets it); tone_settings.preset (enum); tone_settings.customPrompt (text); org_preferences (editor); settings.notification_admin_phone (text, null resets it); settings.notification_admin_email (text, null resets it); settings.checks.callback_enabled (toggle); settings.checks.callback_minutes (number); settings.checks.close_on_activity (toggle). Editor-owned keys run one operation on that editor's own save, sent alone in its own call; read the current value first with read("settings",{area:""}): notification_settings.rules = { op, id?, body? } with op one of: set_destinations ({ edit: "destinations", alerts?: string[] (keys from grouped.catalog), groups?: ("waiting"|"wrong"|"decide"|"fyi")[], destinations: list } sets EXACTLY these destinations for the named alerts and groups; every other alert keeps its own. A destination is { channel: "discord", target_type: "channel", channel_id } (an id from channels), { channel: "discord", target_type: "user", user_id }, { channel: "sms" }, { channel: "push" } or { channel: "webhook" }); set_in_sergio ({ edit: "in_sergio", groups: ("waiting"|"wrong"|"decide"|"fyi")[], value: boolean } shows (or stops showing) every alert of those groups in Sergio); org_holidays = { op, id?, body? } with op one of: add ({ date: "YYYY-MM-DD", label?: string, recurringAnnual?: boolean } (re-adding a date updates it)); remove ({ id } (the holiday id from the read)); platform_email_rules = { op, id?, body? } with op one of: add ({ name, sender_pattern?, subject_pattern?, source_label?, is_active?, priority?, extract_*?: boolean } (one of sender_pattern / subject_pattern)); update (id = the rule id; body = the fields to change, as in add); remove (id = the rule id; no body); blocked_senders = { op, id?, body? } with op one of: add ({ email_pattern: string (an address or *@domain), reason?: string }); remove (id = the blocked sender id; no body); org_preferences = { op, id?, body? } with op one of: add ({ text: string } (one plain-English rule) or { kind, statement, priority?, params? }); update ({ id, statement?, priority?, active?: boolean, kind?, params? }); remove (id = the rule id; no body). Pass the same idempotency_key when retrying; a repeat returns the original result.

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": {
      "changes": "<changes>",
      "idempotency_key": "<idempotency_key>"
    },
    "name": "update_settings"
  }
}

Input Schema

NameRequiredDescriptionDefault
changesYesSetting key -> new value. Send only the keys that change.
justificationNoOptional: why the business wants this change. Shown to the owner in the notice Sergio sends after an owner-level change.
idempotency_keyYesYour id for this operation (8-128 of A-Z a-z 0-9 . _ : -). Reuse it on every retry of the same operation; use a new one for a new operation.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • removedInput schema / properties / changes / properties / scheduling_rules.provider_grid
      Removed value: -{
      -  "description": "Customized for one provider",
      -  "title": "Customized for one provider"
      -}
    • removedInput schema / properties / changes / properties / settings.booking_duration_label
      Removed value: -{
      -  "description": "Word for how long the work takes",
      -  "maxLength": 40,
      -  "title": "Word for how long the work takes",
      -  "type": "string"
      -}
    • removedInput schema / properties / changes / properties / settings.booking_learned_lengths.enabled
      Removed value: -{
      -  "description": "Learn duration from past visits",
      -  "title": "Learn duration from past visits",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / changes / properties / settings.booking_learned_lengths.maxChangePct
      Removed value: -{
      -  "description": "Biggest change from the estimate. In %",
      -  "maximum": 100,
      -  "minimum": 5,
      -  "title": "Biggest change from the estimate",
      -  "type": "number"
      -}
    • removedInput schema / properties / changes / properties / settings.booking_learned_lengths.minVisits
      Removed value: -{
      -  "description": "Visits before Sergio leans on it",
      -  "maximum": 20,
      -  "minimum": 1,
      -  "title": "Visits before Sergio leans on it",
      -  "type": "number"
      -}
    • removedInput schema / properties / changes / properties / settings.booking_spots.counting
      Removed value: -{
      -  "description": "What fills a spot",
      -  "enum": [
      -    "arrivals",
      -    "running"
      -  ],
      -  "title": "What fills a spot",
      -  "type": "string"
      -}
    • removedInput schema / properties / changes / properties / settings.booking_spots.mode
      Removed value: -{
      -  "description": "Where open times come from",
      -  "enum": [
      -    "cleaner_availability",
      -    "booking_spots"
      -  ],
      -  "title": "Where open times come from",
      -  "type": "string"
      -}
    • removedInput schema / properties / changes / properties / settings.booking_spots.perSlot
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "maximum": 50,
      -      "minimum": 1,
      -      "type": "number"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "description": "Bookings per spot",
      -  "title": "Bookings per spot"
      -}
    • addedInput schema / properties / changes / properties / settings.training_access_code_hours
      Added value: +{
      +  "description": "Trainee sign-in code lasts. In h",
      +  "maximum": 48,
      +  "minimum": 1,
      +  "title": "Trainee sign-in code lasts",
      +  "type": "number"
      +}
  2. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare non-read-only, idempotent, non-destructive, closed-world; the description adds the real behavior: role-gated permissions, owner notification with justification, an explicit allow/deny list, single-op constraints for editor keys, and retry semantics ("Pass the same idempotency_key when retrying; a repeat returns the original result"). That is substantial context beyond the annotations.

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?

The permission/limitation rules are well front-loaded, but the middle is a single run-on paragraph enumerating every setting key, much of which merely repeats property names already visible in the schema. The editor-op grammar is dense and would read far better as a structured list than as prose.

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 mutation tool with no output schema and nested objects, this covers permissions, the prerequisite read pattern, per-key payload grammar, null-reset semantics, justification behavior, and idempotency — everything needed to invoke it correctly.

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 100%, so the baseline is 3, but the description genuinely adds meaning the schema lacks: nested editor keys (notification_settings.rules, org_preferences, blocked_senders) are typed only as bare titles/objects in the schema, and the description supplies their op vocabulary and body shapes. It loses a point for conflicting with the schema on org_holidays (schema expects an array of {holiday_date, recurs_yearly}, description describes {op:"add", body:{date, recurringAnnual}}), which could confuse an agent on the exact payload.

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 and resource ("Changes one or more of the organization's settings") and anchors it to a concrete mental model ("as a person on the Settings page would"). The scope statement plus the explicit exclusion categories distinguish it from siblings like update_payroll_settings.

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 names what agents may never change (sending controls, public pages, payments, spend increases, access), when owner-level keys are permitted, and that editor-owned keys must be sent alone in their own call. It also prescribes the prerequisite read("settings", {area:"<that key>"}) before an editor operation, which is exactly the routing an agent needs.

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