# Documents

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

# Documents

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

### `list-documents`

List documents

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | no | Project ID (optional) |
| `path_prefix` | `string` | no | Only documents filed under this directory. The prefix is a path boundary, not a substring: `/reports` returns `/reports/q1.txt` and never `/reports-archive/q1.txt`, and `/` selects the whole project. A leading slash is optional and a trailing one is ignored, so `reports`, `/reports` and `/reports/` are the same filter. `%` and `_` are literal characters, not wildcards. |
| `limit` | `number` | no | Maximum number of results to return |
| `offset` | `number` | no | Number of results to skip |

### `create-document`

Create a document

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | no | Project ID. Required for JWT auth; omit when using an project key. |
| `content` | `string` | yes | — |
| `path` | `string` | no | Logical path within the project (e.g. /reports/q1.txt). Defaults to /filename if omitted. |
| `filename` | `string` | no | — |
| `title` | `string` | no | Document title |
| `metadata` | `object` | no | Arbitrary metadata object. Unlike other body fields, keys are stored and returned verbatim in the casing supplied — they are not converted between snake_case and camelCase. |
| `tags` | `object` | no | Key-value tags |
| `chunk_strategy` | `string` | no | How to split the content into embeddable chunks. `whole` (default) stores the content as a single chunk; `size` splits into fixed-size character windows with overlap. `page` is equivalent to `whole` for plain text. |
| `chunk_size` | `number` | no | Window size in characters when `chunk_strategy=size`. Defaults to 1000. |
| `chunk_overlap` | `number` | no | Overlap in characters between consecutive windows when `chunk_strategy=size`. Defaults to 200. |

### `ingest-document`

Ingest a file into a chunked document

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `wait` | `boolean` | no | When omitted or `false` (default), processing runs in the background and `202 Accepted` is returned immediately with `status=pending`. Pass `true` to block until processing completes and receive `201 Created` with `status=ready`. |
| `file_id` | `string` | yes | ID of the uploaded file. Must be one of application/pdf, text/plain, text/markdown. |
| `project_id` | `string` | no | Project ID. Required for JWT auth; omit when using a project key. |
| `path_prefix` | `string` | no | Path prefix under which to store the document (e.g. /docs/). The filename is appended automatically. |
| `tags` | `object` | no | Key-value tags to attach to the document. |
| `chunk_strategy` | `string` | no | How to split the source into chunks. `page` (default) creates one chunk per non-empty page (PDF); for non-paged sources it yields a single chunk. `whole` joins everything into one chunk. `size` splits into fixed-size character windows with overlap. |
| `chunk_size` | `number` | no | Window size in characters when `chunk_strategy=size`. Defaults to 1000. |
| `chunk_overlap` | `number` | no | Overlap in characters between consecutive windows when `chunk_strategy=size`. Defaults to 200. |

### `get-document`

Get a document by ID

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `document_id` | `string` | yes | Document ID |

### `delete-document`

Delete a document

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `document_id` | `string` | yes | Document ID |

### `update-document`

Update a document

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `document_id` | `string` | yes | Document ID |
| `content` | `string` | no | New text content |
| `title` | `string` | no | New title |
| `path` | `string \| null` | no | Logical path within the project (e.g. /reports/q1.txt). Pass null to clear. |
| `metadata` | `object` | no | Arbitrary metadata object. Unlike other body fields, keys are stored and returned verbatim in the casing supplied — they are not converted between snake_case and camelCase. |
| `tags` | `object` | no | Key-value tags |

### `get-document-status`

Get document ingestion status

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `document_id` | `string` | yes | Document ID |

### `reingest-document`

Re-ingest an existing document

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `document_id` | `string` | yes | Document ID |
| `wait` | `boolean` | no | When omitted or `false` (default), processing runs in the background and `202 Accepted` is returned immediately with `status=pending`. Pass `true` to block until processing completes and receive `201 Created` with `status=ready`. |
| `chunk_strategy` | `string` | no | How to split the source into chunks. Defaults to `page`. |
| `chunk_size` | `number` | no | Window size in characters when `chunk_strategy=size`. Defaults to 1000. |
| `chunk_overlap` | `number` | no | Overlap in characters between consecutive windows when `chunk_strategy=size`. Defaults to 200. |

### `complete-ingestion-callback`

Deliver an async converter result

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `document_id` | `string` | yes | Document ID |
| `token` | `string` | yes | Single-use signed token from the original `callback.token` |

### `get-document-tags`

Get document tags

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `document_id` | `string` | yes | Document ID |

### `replace-document-tags`

Replace document tags

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `document_id` | `string` | yes | Document ID |

### `merge-document-tags`

Merge document tags

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `document_id` | `string` | yes | Document ID |
