# memory_add

> Explicitly save a memory.

URL: https://mcp-docs.opennomos.com/docs/tools/memory/memory_add

> Explicitly save a memory. Content is required; kind and tags are caller-defined and optional. No automatic summarization or classification.

| Field | Value |
| --- | --- |
| Pack | Core (`core`) |
| Estimated cost per call | $0 |
| Monthly pack limit | none |
| Project | resolved: explicit `project` → header → credential default → workspace default |

## Parameters

| Parameter | Required | Type | Description |
| --- | --- | --- | --- |
| `content` | yes | `string` | The memory text, up to 4096 bytes, e.g. 'Reddit r/SaaS ignores self-promo; reply with help first.' |
| `kind` | no | `string \| null` | Optional category you define, e.g. 'insight', 'decision', 'customer'. |
| `tags` | no | `string[]` | Optional labels for filtering, e.g. ['reddit', 'pricing']. Default none. |
| `project` | no | `string` | Project slug or id. Omit to use the credential or workspace default. |

## Example call

```json
{
  "content": "Reddit r/SaaS ignores self-promo; reply with help first.",
  "kind": "insight",
  "tags": [
    "reddit",
    "rules"
  ]
}
```

REST: `POST https://service.opennomos.com/v1/tools/memory_add` with that JSON as the body. MCP: `tools/call` with `name: "memory_add"` and that JSON as `arguments`.

## Example result

Values are illustrative; the shape comes from the service code.

```json
{
  "project": {
    "id": "prj_k3Vd9aQx2",
    "slug": "acme-crm"
  },
  "memory": {
    "id": "mem_Zr81nQw3",
    "kind": "insight",
    "content": "Reddit r/SaaS ignores self-promo; reply with help first.",
    "tags": [
      "reddit",
      "rules"
    ],
    "source": "Claude Code",
    "created_at": "2026-10-16T09:00:00.000Z",
    "updated_at": "2026-10-16T09:00:00.000Z"
  }
}
```

## Notes

- Memory is **explicit**: nothing is saved unless you call this. There is no summarisation, classification or confidence score, and `kind` has no fixed list.
- Content is limited to 4096 bytes (UTF-8, so roughly 1,300 Chinese characters). Split long lists into several entries, or track people and posts as [opportunities](https://mcp-docs.opennomos.com/docs/growth-loop/memory-vs-opportunity.md) instead.
- Writes are rate limited per workspace (60 per minute, per isolate).

## Errors

Rejected calls (bad input, unknown ids, rate limits) return `message` and `code`; over MCP the result has `isError: true`. See [Errors](https://mcp-docs.opennomos.com/docs/reference/errors.md).
