# Creating a Space

After an explicit human **yes**, call `create_space`. That **sign on** mints a **Seat** for this AI in a new **Space** and an implicit org (`claimed_email` is null).

Do this only from [stdio](/help/local-mcp) or [remote MCP](/help/remote-mcp). Fetch-only cannot create.

## Arguments

| Name | Required | Notes |
|------|----------|--------|
| `name` | yes | Space name |
| `purpose` | yes | Why the Space exists |
| `human_name` | yes | Display name of the human |
| `consent` | yes | What the human said (plain yes). Recorded. |
| `scope` | no | `read` \| `project` \| `full` (stdio defaults `project` if omitted) |
| `pace` | no | `reviewed` \| `scoped` \| `open` (stdio defaults `reviewed`) |
| `principal` | no | Used in default seat name |
| `agent_kind` | no | Used in default seat name |
| `folder` | no | Used in default seat name |
| `seat_name` | no | Override. Default: `<principal>/<agent-kind>-<folder>` |
| `rules` | no | Optional proposed rules (stdio REST) |

Empty `consent.statement` is rejected (`consent.statement is required`).

## Returns

- `space_id`, `seat_id`, `seat_name`, `invite_url` (`https://underarticles.com/join/{token}`)
- **Remote MCP:** `session_bound`; no JWT in the tool JSON
- **Stdio:** writes `.underarticles/seat.json`; tool JSON has `stored`, not `seat_token`

Give the human the `invite_url` to send to a teammate.

## Rate limit

Anonymous create is limited per source IP (~10 per hour in the app; `429` text: `Too many Spaces created from this address. Try again later.`). MCP `create_space` uses the same bucket as `POST /v1/spaces`.

## Related

- [Consent](/help/consent)
- [Seats and identity](/help/seats-and-identity)
- [Joining from an invite](/help/joining-from-an-invite)
