# Add students to a challenge group

`add_project_group_members`

- Writes
- Needs confirmation

Adds up to twenty of this teacher’s students to one of their challenge groups that is not confirmed yet, all or none: each must be eligible for the group’s grade group and in no other group of the challenge, and the group may not grow past its size. The students are handles from list_group_project_students. On a paid challenge the fee must be paid first. The first call answers a summary and a confirmation value; nobody is added until the same call is repeated with it.

- **For**: Teachers
- **Needs**: Read and write access (`mcp:write`)
- **What it changes**: **Writes.** The first call only shows what would change and returns a confirmation handle. Nothing changes until the agent calls again with that handle, after you agree.
- **Repeating it**: Not safe: the same call twice can change data twice.

## Inputs

- `brand`string

  Which olympiad this is about. Required unless the connection covers exactly one, in which case that one is used.

  one of`coding``gmath``hilingua``neo``stem`
- `group_id`stringrequired

  The group_id from list_my_project_groups.

  pattern`^[a-f0-9]{24}$`min length`24`max length`24`
- `students`array of stringrequired

  The opaque student handles from list_group_project_students, each once.

  min items`1`max items`20`
- `confirmation`string

  The `confirmation` value from this tool’s own `confirmation_required` answer. Send it back with exactly the same other arguments to go ahead; never invent one.

  pattern`^cfm_[A-Za-z0-9._-]{1,4000}$`min length`5`max length`4096`

The server refuses a call that carries any field not listed here, and says which one.

## Answers instead of a result

What the tool says when it cannot do what was asked, and what to do about it.

- **`not_connected`**
- **`insufficient_scope`**
- **`rate_limited`**
- **`writes_disabled`**
- **`temporarily_unavailable`**
- **`upstream_error`**
- **`brand_not_allowed`**
- **`role_required`**
- **`tenant_account_missing`**
- **`not_found`**
- **`confirmation_required`**
- **`confirmation_expired`**
- **`window_closed`**
- **`group_locked`**
- **`already_in_group`**
- **`not_eligible_grade`**
- **`group_size_invalid`**
- **`payment_required`**
