Skip to main content
Glama

Set workspace preference

well_upsert_preference
Destructive

Set a workspace preference. scope: "workspace" with no namespace sets the workspace-wide default, which only a workspace owner or admin can set; a namespaced workspace value is open to any member. scope: "member" sets the CALLER's own override for themselves; only an owner or admin can pass member_id to set another member's action_trust level.

Known keys: invoice_default_layout, invoice_design, action_trust, preferred_name, form_of_address, mail_sender_choice, timezone, bank_account_offer, invoice_payment_account, payment_link_reconnect_offer, sunday_routines, customer_facts_note_id. An unrecognized key is refused, never silently accepted.

  • action_trust: how far Well may act alone for one kind of action. The namespace is the kind code (for example send_in_name, change_record) and the value is confirm or act_alone. Over this MCP server a level can be lowered to confirm but never raised to act_alone: the person raises it in Well's own chat. Payments, bank detail changes and password changes always ask and have no level.

  • invoice_default_layout: the workspace's house invoice design, one of the layouts the invoice-design card offers.

  • invoice_design: the invoice design options object the invoice-design card hands you: { layout, theme, locale, payment_terms_note_id, tax_rate_id, legal_mentions_note_id, payment_means_id }, each optional, ids as uuid or null. It is the exact object well_generate_document takes as design, so store it with those keys. Never store the design_* attributes: that spelling belongs only to well_update_invoice_design, and is converted to (layout → design_layout, payment_means_id → design_payment_means_id, …) only when calling that tool.

  • preferred_name: the name the person chose to be called by, as text (e.g. "Max"). It belongs to that person alone: save it with scope: "member" and no namespace; any other scope or namespace is refused.

  • timezone: the person's own IANA time zone name (e.g. "Europe/Paris"), used to read the times they say. It belongs to that person alone: save it with scope: "member" and no namespace; any other scope or namespace is refused.

  • form_of_address: the register Well writes to the person in, informal or formal, for a language that separates two (French "tu" or "vous"). It belongs to that person alone, like preferred_name: scope: "member" and no namespace.

  • mail_sender_choice: the caller's private choice for one mail sender. Save it only with scope: "member"; the workspace scope and a member_id that names another member are refused. The namespace is the namespace that well_list_mail_senders returns for that sender (sender: and a 40-character hash of the address): pass it back unchanged and never compute it. The value is { "choice": "keep" | "skip" | "unsubscribe", "sender": "<address>" }, and sender is the address that namespace was made from.

  • bank_account_offer: where the one offer to add a bank account the invoices print stands for the caller: offered when the offer is made, then declined or added with the person's answer. It belongs to that person alone: save it with scope: "member" and no namespace. Any saved value means the offer is never made again.

  • invoice_payment_account: the account the workspace marks as primary, which an invoice prints when no earlier invoice of the issuing company printed one of its own accounts. The value is { "payment_means_id": "<uuid>" }, the id of one payment means of the workspace's own company, never an account of another company or of a person. Save it only with scope: "workspace" and no namespace, when the person asks in words for that account by default; only a workspace owner or admin can set it.

  • payment_link_reconnect_offer: where the one offer to reconnect the provider that makes payment links (Stripe or Qonto) stands for the caller: offered when the offer is made, then declined when the person says no. It belongs to that person alone: save it with scope: "member" and no namespace. Any saved value means the offer is never made again.

  • sunday_routines: whether the caller's routines (the morning brief, routine reports and reminders) run on Sunday in their own time zone. By default they do not, unless a business meeting is on the caller's calendar that Sunday or the caller often writes to Well on Sundays. Save receive, the only value, when the person asks to get them on Sunday too, from now on. Save nothing for one Sunday only ("not this Sunday", "skip the brief tomorrow"): this key is permanent. It belongs to that person alone: save it with scope: "member" and no namespace. For one routine on Sunday only, name Sunday in that routine's rhythm instead. When the person asks never to get anything on Sunday, even when they have meetings, save nothing: say that Sundays are already held back by default, and that only a business meeting on their calendar that Sunday, an explicit ask or a habit of writing to Well on Sundays lifts it.

  • customer_facts_note_id: the one note whose text Well may tell the shop's customers when it answers them on the shop's own WhatsApp Business number (hours, prices, stock, delivery rules). Well tells them nothing else from the workspace. The value is the note_id of one shared note written in Well: a private note, a note synced from another tool (Notion, Drive and similar), a deleted note or a note of another workspace is refused. Save it only with scope: "workspace" and no namespace, when the person names that note as what customers may be told; only a workspace owner or admin can set it. To stop customer answers, delete the key with well_delete_preference. The facts stay in the note: a change to the note reaches the next customer answer, so never save the facts themselves here.

namespace keeps a separate value of the same key per subject. To save a design for one customer, set namespace: "customer:<id>", where is the customer's company_id or person_id, and read it back with the same namespace. Omit namespace for the value that applies to no particular subject. A namespaced value never falls back to the un-namespaced one.

scope: "member" requires a caller with a resolvable person identity in this workspace. A caller with no person attached (an API key) can set only a namespaced workspace value: a member override or the workspace-wide default fails closed rather than falling back to another scope.

The result includes previous_value: the value that sat at this exact (workspace, scope, namespace) row immediately before this write, or null if this is the first write to that row. Use it to revert a change the user asks to undo, without a separate read.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
keyYesThe preference key to set.
scopeYes"workspace" sets the shared default; "member" sets the caller's own override.
valueYesThe value to store: text for a text key, the JSON object for invoice_design, mail_sender_choice or invoice_payment_account.
member_idNoOwner or admin only: the membership_id of the member whose action_trust level to set. Omit for the caller's own.
namespaceNoKeeps a separate value per subject, e.g. "customer:<company_id or person_id>". Omit for none.
workspace_idNoTarget workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.
conversation_idNoThe conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.
idempotency_keyNoOptional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.
workspace_scopeNoRestrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
keyNo
errorNo
scopeNo
valueNo
successYes
namespaceNo
calendar_zoneNoA time zone write only: the zone the person's calendar last showed, or null when none was read.
previous_valueNoThe value that sat at this exact row before this write, or null if none existed yet.
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
newly_connectedNoTools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.
calendar_out_of_dateNoA time zone write only: true when the calendar still shows another zone than the one just saved.
conversation_id_noteNoPresent only when the server opened a fresh lane, stating that no choice recorded earlier was read.
conversation_id_sourceNoWhere the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / key / enum
      Previous value: -[
      -  "invoice_default_layout",
      -  "invoice_design",
      -  "action_trust",
      -  "preferred_name",
      -  "form_of_address",
      -  "mail_sender_choice",
      -  "timezone",
      -  "bank_account_offer",
      -  "invoice_payment_account",
      -  "payment_link_reconnect_offer",
      -  "sunday_routines"
      -]New value: +[
      +  "invoice_default_layout",
      +  "invoice_design",
      +  "action_trust",
      +  "preferred_name",
      +  "form_of_address",
      +  "mail_sender_choice",
      +  "timezone",
      +  "bank_account_offer",
      +  "invoice_payment_account",
      +  "payment_link_reconnect_offer",
      +  "sunday_routines",
      +  "customer_facts_note_id"
      +]
  2. Changed2 schema fields changed
    • changedInput schema / properties / key / enum
      Previous value: -[
      -  "invoice_default_layout",
      -  "invoice_design",
      -  "action_trust",
      -  "preferred_name",
      -  "form_of_address",
      -  "mail_sender_choice",
      -  "timezone",
      -  "bank_account_offer",
      -  "invoice_payment_account",
      -  "payment_link_reconnect_offer"
      -]New value: +[
      +  "invoice_default_layout",
      +  "invoice_design",
      +  "action_trust",
      +  "preferred_name",
      +  "form_of_address",
      +  "mail_sender_choice",
      +  "timezone",
      +  "bank_account_offer",
      +  "invoice_payment_account",
      +  "payment_link_reconnect_offer",
      +  "sunday_routines"
      +]
    • changedOutput schema / properties / newly_connected / description
      Previous value: -"Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. Start the reply with one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later."New value: +"Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later."
  3. Changed2 schema fields changed
    • changedInput schema / properties / key / enum
      Previous value: -[
      -  "invoice_default_layout",
      -  "invoice_design",
      -  "action_trust",
      -  "preferred_name",
      -  "form_of_address",
      -  "mail_sender_choice",
      -  "timezone",
      -  "bank_account_offer"
      -]New value: +[
      +  "invoice_default_layout",
      +  "invoice_design",
      +  "action_trust",
      +  "preferred_name",
      +  "form_of_address",
      +  "mail_sender_choice",
      +  "timezone",
      +  "bank_account_offer",
      +  "invoice_payment_account",
      +  "payment_link_reconnect_offer"
      +]
    • changedInput schema / properties / value / description
      Previous value: -"The value to store: text for a text key, the JSON object for invoice_design or mail_sender_choice."New value: +"The value to store: text for a text key, the JSON object for invoice_design, mail_sender_choice or invoice_payment_account."
  4. Changed3 schema fields changed
    • changedInput schema / properties / key / enum
      Previous value: -[
      -  "invoice_default_layout",
      -  "invoice_design",
      -  "action_trust",
      -  "preferred_name",
      -  "form_of_address",
      -  "mail_sender_choice",
      -  "bank_account_offer"
      -]New value: +[
      +  "invoice_default_layout",
      +  "invoice_design",
      +  "action_trust",
      +  "preferred_name",
      +  "form_of_address",
      +  "mail_sender_choice",
      +  "timezone",
      +  "bank_account_offer"
      +]
    • addedOutput schema / properties / calendar_out_of_date
      Added value: +{
      +  "description": "A time zone write only: true when the calendar still shows another zone than the one just saved.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / calendar_zone
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "A time zone write only: the zone the person's calendar last showed, or null when none was read."
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / key / enum
      Previous value: -[
      -  "invoice_default_layout",
      -  "invoice_design",
      -  "action_trust",
      -  "preferred_name",
      -  "form_of_address",
      -  "mail_sender_choice"
      -]New value: +[
      +  "invoice_default_layout",
      +  "invoice_design",
      +  "action_trust",
      +  "preferred_name",
      +  "form_of_address",
      +  "mail_sender_choice",
      +  "bank_account_offer"
      +]
  6. Changed3 schema fields changed
    • changedInput schema / properties / key / enum
      Previous value: -[
      -  "invoice_default_layout",
      -  "invoice_design",
      -  "action_trust",
      -  "preferred_name"
      -]New value: +[
      +  "invoice_default_layout",
      +  "invoice_design",
      +  "action_trust",
      +  "preferred_name",
      +  "form_of_address",
      +  "mail_sender_choice"
      +]
    • changedInput schema / properties / value / description
      Previous value: -"The value to store: text for a text key, the JSON object for invoice_design."New value: +"The value to store: text for a text key, the JSON object for invoice_design or mail_sender_choice."
    • addedInput schema / properties / workspace_scope
      Added value: +{
      +  "description": "Restrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.",
      +  "enum": [
      +    "family"
      +  ],
      +  "type": "string"
      +}
  7. Changed3 schema fields changed
    • changedInput schema / properties / key / enum
      Previous value: -[
      -  "invoice_default_layout",
      -  "invoice_design"
      -]New value: +[
      +  "invoice_default_layout",
      +  "invoice_design",
      +  "action_trust",
      +  "preferred_name"
      +]
    • addedInput schema / properties / member_id
      Added value: +{
      +  "description": "Owner or admin only: the membership_id of the member whose action_trust level to set. Omit for the caller's own.",
      +  "format": "uuid",
      +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +  "type": "string"
      +}
    • addedOutput schema / properties / newly_connected
      Added value: +{
      +  "description": "Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. Start the reply with one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "name": {
      +        "type": "string"
      +      },
      +      "service_id": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "service_id"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  8. Added

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources