Skip to main content
Glama

Create an expense group

well_create_expense_group

Create a shared-expense group in this workspace: people who split what they paid, such as a dinner, a trip or a flat share. The person who asks becomes its first member: group.created_by_person_id is their own person id. It writes only inside Well and sends nothing.

A group holds one currency for every expense and repayment, and converts nothing. Add the other people with well_create_expense_group_member.

Call it only after the person said yes to creating this group, in this conversation.

Read outcome: written with group, or refused means nothing was written. reason names why: group_not_found (no such group in this workspace), person_not_found (a person id names no person of this workspace), not_a_member, payer_not_a_member, from_not_a_member or to_not_a_member (that person is not a member of the group: add them first), currency_mismatch (the group holds one other currency), invalid_amount, invalid_weight, no_shares, duplicate_share, same_person, already_a_member, caller_not_a_member or caller_not_a_person_here (the call names no person of this workspace).

When the token authorizes one workspace, call this directly — no workspace call is needed first. When it authorizes several, this read will not guess which one you mean: pass workspace_id on the call.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesThe group's name, in the person's words.
currencyYesThe one ISO 4217 currency of the group, such as EUR.
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
errorNo
groupNo
reasonNo
outcomeNo
successYes
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.
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. Added

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=false and destructiveHint=false; the description adds real context beyond them — writes stay inside Well and send nothing, the caller becomes the first member (group.created_by_person_id), and the group's single currency converts nothing. The long reason enumeration is behavioral detail, but several codes (invalid_weight, no_shares, duplicate_share, from_not_a_member/to_not_a_member, group_not_found) appear to belong to expense-line or settlement tools and are misleading for a group-creation call.

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 purpose and precondition are well front-loaded, but the middle block enumerates roughly fifteen outcome/reason codes that are largely redundant with the output schema and partly irrelevant to this tool, bloating the definition without helping selection or invocation. The workspace paragraph also slips into calling a write operation 'this read'.

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?

Because an output schema exists, the outcome/reason explanation is not strictly required, yet the description still covers the essentials: precondition to create, who becomes the first member, the single-currency rule, the member-add follow-up, and workspace resolution. It is complete for correct invocation; the muddled reason list is extra noise rather than a gap.

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 description coverage is 100%, so the schema baseline is 3, but the description adds genuine meaning: currency is one fixed unit for every expense and repayment with no conversion, and workspace_id is only needed when the token spans multiple workspaces. It does not add anything for name, conversation_id or idempotency_key that the schema doesn't already state.

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?

The opening sentence states a precise verb and resource ('Create a shared-expense group in this workspace') and immediately grounds it in examples (dinner, trip, flat share). It clearly distinguishes itself from the closely named siblings well_create_expense_group_member, well_create_expense_line and well_list_expense_groups.

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?

It gives an explicit precondition ('Call it only after the person said yes to creating this group, in this conversation') and routes the agent to the correct sibling for the follow-up step ('Add the other people with well_create_expense_group_member'). It also resolves the workspace-selection branch: call directly when the token authorizes one workspace, pass workspace_id when it authorizes several.

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