# MemoryStores MCP Tools

> The MCP tools the SOAT server exposes for the MemoryStores module, with the arguments each tool takes.

# MemoryStores

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

### `list-memory-stores`

List memory stores

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | no | Project ID (required if not using project key auth) |
| `tags` | `array` | no | Filter by tag pairs, written `key:value` (split on the first colon, so a value may contain colons). Repeat the parameter for several pairs; **all** must be present with exactly that value. |
| `limit` | `number` | no | Results per page. Above the maximum it is clamped, and `limit` in the response reports the page served; below 1 or not an integer it is `400 VALIDATION_FAILED`. |
| `offset` | `number` | no | Results to skip. Negative or not an integer it is `400 VALIDATION_FAILED`. |

### `create-memory-store`

Create a memory store

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | no | Project ID (required if not using project key auth) |
| `name` | `string` | yes | Memory store name |
| `description` | `string` | no | Optional description |
| `tags` | `any` | no | Optional key-value tags. Scopes the memory store in knowledge search, where every requested pair must match exactly. |
| `duplicate_threshold` | `number \| null` | no | The store's dedup policy: cosine similarity at or above which an incoming fact is already known and the write is skipped. `null` (the default) uses the algorithm constant `0.95`. A single `POST /api/v1/memories` call may override it; the agent tool and the post-turn rule never can. |
| `supersede_threshold` | `number \| null` | no | Cosine similarity at or above which an incoming fact restates a known one that has changed: the matched memory is invalidated and replaced. `null` (the default) uses the algorithm constant `0.90`. Must be lower than the effective `duplicate_threshold`, or the write is rejected with `400 VALIDATION_FAILED` — equal makes `superseded` unreachable and inverted swallows `skipped`. |

### `get-memory-store`

Get a memory store

#### Arguments

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

### `update-memory-store`

Update a memory store

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `memory_store_id` | `string` | yes | — |
| `name` | `string` | no | Memory store name |
| `description` | `string \| null` | no | Optional description |
| `tags` | `any` | no | Optional key-value tags. Replaces the stored bag; `null` clears it. |
| `duplicate_threshold` | `number \| null` | no | The store's dedup policy: cosine similarity at or above which an incoming fact is already known and the write is skipped. `null` (the default) uses the algorithm constant `0.95`. A single `POST /api/v1/memories` call may override it; the agent tool and the post-turn rule never can. |
| `supersede_threshold` | `number \| null` | no | Cosine similarity at or above which an incoming fact restates a known one that has changed: the matched memory is invalidated and replaced. `null` (the default) uses the algorithm constant `0.90`. Must be lower than the effective `duplicate_threshold`, or the write is rejected with `400 VALIDATION_FAILED` — equal makes `superseded` unreachable and inverted swallows `skipped`. |

### `delete-memory-store`

Delete a memory store

#### Arguments

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

### `list-memory-store-assertions`

List a memory store's write assertions

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `memory_store_id` | `string` | yes | — |
| `mechanism` | `string` | no | Only assertions that came through this door. |
| `outcome` | `string` | no | Only assertions that resolved this way. |
| `generation_id` | `string` | no | Only assertions made during this generation. A generation that does not exist matches nothing rather than widening to the whole store. |
| `from` | `string` | no | Only assertions recorded at or after this instant (ISO 8601). |
| `to` | `string` | no | Only assertions recorded at or before this instant (ISO 8601). |
| `limit` | `number` | no | Results per page. Above the maximum it is clamped, and `limit` in the response reports the page served; below 1 or not an integer it is `400 VALIDATION_FAILED`. |
| `offset` | `number` | no | Results to skip. Negative or not an integer it is `400 VALIDATION_FAILED`. |

### `get-memory-store-tags`

Get memory store tags

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `memory_store_id` | `string` | yes | Memory store ID |

### `replace-memory-store-tags`

Replace memory store tags

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `memory_store_id` | `string` | yes | Memory store ID |

### `merge-memory-store-tags`

Merge memory store tags

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `memory_store_id` | `string` | yes | Memory store ID |
