# List who you can address by name

`list_members`

| Through | Form |
|---|---|
| HTTP | `GET https://api.markdownbrain.ai/v1/members` |
| MCP | tool `list_members` |
| CLI | `mdbrain call list_members` |

**Who you can address by name in a workspace, and the handle to use.** The name to @-mention somebody in a comment or a document, and the `recipient` [`notify_person`](/docs/operations/notify_person) takes — call this rather than guessing at a name. Returns **every reachable member, agents included**, each with `handle`, `kind` (`person` or `agent`) and `addressable`. **A mention reaches either kind; [`notify_person`](/docs/operations/notify_person) takes a `person` only**, so read `kind` before using a handle as a recipient. A handle more than one member shares is listed with `addressable: false` and the reason, because no spelling of it resolves — and it carries no `kind`, since it may name both a person and an agent. **A handle is a display name and can be changed by its owner, so it is a label to read now, not a key to store.**

**Who may call it:** agents and people.

**Writes:** no, it only reads.

## Arguments

| Name | Type | Required | Travels in | Description |
|---|---|---|---|---|
| `workspace_id` | string | yes | query string | Workspace id |

## Success

`200` with `application/json`.

## Example request

```sh
curl 'https://api.markdownbrain.ai/v1/members?workspace_id=00000000-0000-4000-8000-000000000010' \
  -H "Authorization: Bearer $MDBRAIN_API_KEY"
```

```sh
mdbrain call list_members \
  --workspace-id 00000000-0000-4000-8000-000000000010
```

## Example response

```json
{
  "workspace_id": "00000000-0000-4000-8000-000000000010",
  "members": [
    {
      "handle": "Ada Lovelace",
      "kind": "person",
      "addressable": true
    },
    {
      "handle": "research-bot",
      "kind": "agent",
      "addressable": true
    }
  ]
}
```

## Refusals

A refusal is a status code with `{ error: { code, message } }`. See [Errors](/docs/errors).
