Skip to main content
Glama

List invite suggestions

well_list_invite_suggestions
Read-only

List the teammates Well suggests inviting into this workspace: the people it found on the workspace owner's email domain who hold no membership, each as an open invite suggestion. Only a workspace owner or admin can read them; any other caller is refused with refusal_reason: "not_admin".

Use it for two things only. (1) Before you offer a teammate without being asked, at most once in a session opening: offer only when offer_allowed is true and suggestions is not empty, then record the offer with well_record_invite_answer (outcome: "offered") BEFORE you write the offer line, and write it only when that call returns recorded: true. (2) When the person answers an earlier offer ("later", "no"), to find the suggestion's task_id. To invite someone the person asked for, use well_list_member_candidates instead: a request is never limited by this cap.

Returns suggestions (every open suggestion, oldest first, at most the workspace's open cap; the order is not a preference, so pick from each row's last_offered_at; each with task_id, person_id, name, email, refusal_count and last_offered_at), offer_allowed (true when no unprompted offer went out in the last 7 days on any surface: web, extension, Claude, ChatGPT or WhatsApp) and next_offer_at. A suggestion the person put off or declined is not listed until it comes back 30 days later, and a second no removes it for good. On a demo workspace, which holds sample data, suggestions is empty, offer_allowed is false and refusal_reason is demo_workspace: offer nobody and say nothing about inviting: this read runs unprompted, so the person asked for nothing.

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

NameRequiredDescriptionDefault
workspace_idNoTarget workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose 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.
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

NameRequiredDescriptionDefault
errorNo
successYes
suggestionsYes
workspace_idNo
next_offer_atYesWhen the weekly offer cap frees, or null when it is free.
offer_allowedYesTrue when no unprompted invite offer went out in this workspace in the last 7 days, on any surface.
refusal_reasonNo
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.
resolved_workspaceNoThe workspace that answered, when the caller named none and the token authorizes several.
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
    • changedOutput schema / properties / refusal_reason / enum
      Previous value: -[
      -  "not_admin"
      -]New value: +[
      +  "not_admin",
      +  "demo_workspace"
      +]
  2. Changed10 schema fields changed
    • removedOutput schema / properties / next_offer_at / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / next_offer_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / resolved_workspace / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / resolved_workspace / properties / name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / suggestions / items / properties / last_offered_at / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / suggestions / items / properties / last_offered_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / suggestions / items / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / suggestions / items / properties / name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / suggestions / items / properties / person_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / suggestions / items / properties / person_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Changed1 schema field changed
    • 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."
  4. Changed1 schema field changed
    • 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"
      +}
  5. Changed1 schema field changed
    • 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"
      +}
  6. Added

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly/openWorld/destructive hints, it discloses authorization ('only a workspace owner or admin', otherwise `refusal_reason: "not_admin"`), the audit trail (must call well_record_invite_answer with `outcome: "offered"` before writing an offer, and only when `recorded: true`), the 7-day unprompted-offer cooldown and 30-day deferral/permanent-removal lifecycle, and the demo-workspace behavior. These are non-obvious operational rules an agent could not obtain from annotations alone.

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?

The purpose is front-loaded in the first sentence and the workflow/eligibility rules follow in blocks that mostly earn their space. The text is dense and occasionally repetitive – the demo-workspace paragraph restates the 'unprompted read' point – so it is strong but not maximally tight.

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 read tool with rich gating logic, it covers who may call it, what comes back at a high level, the eligibility lifecycle, the demo-workspace edge case, and how the workspace is selected when a token spans several. Nothing an agent needs in order to call it correctly or correctly refrain from acting is missing.

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 the descriptions of `workspace_id`, `conversation_id` and `workspace_scope` already carry most of the burden. The prose adds a little conditional guidance for `workspace_id` (omit with a single-workspace token, pass it when several are authorized) and for conversation threading, but it says nothing about `workspace_scope`, so baseline 3 is appropriate.

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 gives a specific verb and resource ('List the teammates Well suggests inviting into this workspace') and characterizes what each row is ('an open invite suggestion'). It also distinguishes itself from the closest sibling by naming well_list_member_candidates as the tool for invitations a person explicitly requested, so an agent can separate the two 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 Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description enumerates exactly two permitted uses (unprompted offer at session opening, and resolving an earlier reply to find `task_id`) and redirects the third case – inviting someone the person asked for – to well_list_member_candidates. It states the gating predicates (`offer_allowed` true and `suggestions` non-empty), the required ordering with well_record_invite_answer, and the read-only-on-demo-workspace exception, leaving nothing to inference.

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