# `get_group_details`

Reads one group, its member roster, and the active goals shared with it.

Annotations: `readOnlyHint: true` · `destructiveHint: false` · `idempotentHint: true` · `openWorldHint: false`

## When to use it

- To see who's in a group, for example before deciding whether to share a goal with it.
- To find your goal in a group you named, through `ownGoals`.
- To find the ID of a fellow member's goal shared with the group.

Reuse a `publicId` you already have instead of listing groups again.

## Inputs

| Input | Required | Type | Description |
| --- | --- | --- | --- |
| `groupPublicId` | yes | string | A `publicId` from [`list_groups`](/docs/mcp/tools/list_groups): 32 lowercase hexadecimal characters |

## Returns

`{ "group": ... }`. The group has the [`list_groups`](/docs/mcp/tools/list_groups) fields, plus:

| Field | Type | Description |
| --- | --- | --- |
| `roster` | list | The group's members, moderators first |
| `goals` | list | Every active goal shared with the group that you can read, newest first, with the [`list_goals`](/docs/mcp/tools/list_goals) fields |
| `ownGoals` | list | The goals in `goals` that you own |

Each roster entry has:

| Field | Type | Description |
| --- | --- | --- |
| `memberId` | string | Member ID |
| `displayName` | string or null | Name |
| `email` | string or null | Email address, for your own use only |
| `imageUrl` | string or null | Profile photo |
| `isModerator` | boolean | Moderates the group |
| `isCurrentMember` | boolean | This entry is you |
| `isSearchable` | boolean | Gravity can search this member's network. It says nothing about who's in it. |
| `gmailConnectionState` | string | `connected`, `disconnected`, `never_connected`, or `unknown` |
| `canAskToConnect` | boolean | You could ask this member to connect Gmail in Gravity |

A goal owned by someone else never includes its private details: its `additionalContext` is empty and its `clarificationQuestion` is null. A goal hidden from this group is listed only for its owner. Read a goal with [`get_goal`](/docs/mcp/tools/get_goal) before acting on it.

`group` is `null` when the group doesn't exist, the ID is malformed, or you don't belong to it.

## Example

```json get_group_details
{ "groupPublicId": "3a9f0c6e1b2d4e5f8a7b6c5d4e3f2a1b" }
```

Trimmed result:

```json
{
  "group": {
    "publicId": "3a9f0c6e1b2d4e5f8a7b6c5d4e3f2a1b",
    "name": "Founders dinner",
    "memberCount": 7,
    "isModerator": false,
    "roster": [
      { "memberId": "b7c8d9e0-f1a2-4b3c-8d4e-5f6a7b8c9d0e", "displayName": "Sam Rivera", "isModerator": true, "isCurrentMember": false, "isSearchable": true }
    ],
    "goals": [
      { "id": "6f1c2a3e-4b5d-4e6f-8a7b-9c0d1e2f3a4b", "text": "Meet seed investors who back developer tools.", "additionalContext": "Raising $2M. 40 paying teams.", "isOwner": true },
      { "id": "4e5f6a7b-8c9d-4e0f-9a1b-2c3d4e5f6a7b", "text": "Hire a founding designer.", "additionalContext": "", "isOwner": false }
    ],
    "ownGoals": [
      { "id": "6f1c2a3e-4b5d-4e6f-8a7b-9c0d1e2f3a4b", "text": "Meet seed investors who back developer tools.", "additionalContext": "Raising $2M. 40 paying teams.", "isOwner": true }
    ]
  }
}
```

## Related

- [`get_goal`](/docs/mcp/tools/get_goal) reads one goal in full.
- [Find matches and search again](/docs/mcp/guides/find-matches) starts from a group name.
