# Projects

> MCP tools for the Projects module. See the [Projects module docs](/docs/modules/projects) for permissions and data model.

# Projects

MCP tools for the Projects module. See the [Projects module docs](/docs/modules/projects) for permissions and data model.

### `list-projects`

List projects

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `limit` | `number` | no | Maximum number of results to return |
| `offset` | `number` | no | Number of results to skip |

### `create-project`

Create a project

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `name` | `string` | yes | — |

### `get-project`

Get a project

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | yes | Project public ID (proj_ prefix) |

### `update-project`

Update a project

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | yes | Project public ID (proj_ prefix) |
| `name` | `string` | no | — |
| `guardrail_ids` | `array<string> \| null` | no | Guardrails attached at the project scope. |
| `max_concurrent_runs` | `number \| null` | no | Maximum orchestration runs of this project driven at once. `null` clears the limit (unlimited); otherwise an integer >= 1. Enforced at queue claim time — excess runs stay queued until a slot frees. |
| `max_chain_generations` | `number \| null` | no | Generations one continuation chain in this project may hold before the platform stops resuming it. `null` clears the project's ceiling, leaving the deployment-wide `MAX_CONTINUATION_CHAIN_GENERATIONS`; otherwise an integer >= 1. The effective budget is the smallest of the deployment's ceiling, this one, and the agent's own `max_chain_generations` stop condition, so an agent author can be stricter than this number but never exceed it. |
| `max_orchestration_run_depth` | `number \| null` | no | `loop` / `sub_orchestration` nesting levels a run tree in this project may reach before the engine refuses to start the next child. `null` clears the project's bound, leaving the deployment-wide `MAX_ORCHESTRATION_RUN_DEPTH` (default 10); otherwise an integer >= 1. The effective bound is the smaller of the two, so this can only be stricter than the deployment's — which is what makes it a bound a graph author cannot opt out of. A refused child fails its parent run with `ORCHESTRATION_RUN_DEPTH_LIMIT`. |
| `default_model_route_id` | `string \| null` | no | Model route inherited by consumers in this project that bind neither `model_route_id` nor `ai_provider_id`. The route must belong to this project (`400` otherwise). `null` clears the default, which is refused with `409` while any consumer inherits it — repointing it to another route is always allowed and immediately changes which targets those consumers use. |
| `audit_reads_enabled` | `boolean` | no | Opt the project into read auditing. When true, `GET` requests that name this project are recorded in the audit log alongside mutations. Defaults to `false`. |
| `trace_content_retention_days` | `number \| null` | no | How long trace and generation content is kept before the daily retention sweep content-purges it. `null` (the default) disables retention; otherwise an integer >= 1. The sweep uses the same purge path as `DELETE /traces/{trace_id}/content`, so the row survives as an auditable skeleton with `content_redacted_at` set. |
| `trace_content_mode` | `string` | no | Whether trace and generation content is persisted at all. `full` (the default) stores it; `none` is zero-retention — content is never written, for every agent in the project. An agent may tighten this to `none` on its own but cannot loosen a `none` project back to `full`. |

### `delete-project`

Delete a project

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | yes | Project public ID (proj_ prefix) |
| `force` | `boolean` | no | When `true`, deletes all of the project's dependent resources instead of returning `409 PROJECT_HAS_DEPENDENTS`. |

### `get-project-prices`

List a project's price rows

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | yes | Project public ID (proj_ prefix) |

### `update-project-prices`

Upsert a project's price rows

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | yes | Project public ID (proj_ prefix) |
| `prices` | `array<object>` | yes | — |
