Files
mem0/docs/integrations/n8n.mdx
T
kartik-mem0 29601e54f4 fix(n8n): restore App ID, Includes and Excludes, add App ID filters
Reverts the removal in 2a61fe1a. That commit dropped app_id, includes and
excludes from Add because docs/openapi.json does not declare them on
POST /v3/memories/add/. The schema is incomplete: probing the live endpoint
shows all three are accepted and honoured.

- app_id is persisted and is queryable via /v3/memories/search/ and
  /v3/memories/, so the entity-id guard accepts it again as a valid scope
- includes/excludes demonstrably steer extraction. The same message stored
  three memories unfiltered and one under
  includes: "only record food and diet preferences"

Search and Get Many gain an App ID filter alongside User/Agent/Run. Writing
an app-scoped memory was otherwise unreadable from this node, and app_id is
how the OpenCode and Pi Agent plugins express project scope.

buildEntityFilters now takes the ids as an object rather than four adjacent
positional strings, so a fifth entity is a one-key change.
2026-07-29 22:18:19 +05:30

101 lines
4.6 KiB
Plaintext

---
title: n8n
description: "Add long-term memory to n8n workflows and AI Agents with the Mem0 community node, no code required."
---
The [`@mem0/n8n-nodes-mem0`](https://www.npmjs.com/package/@mem0/n8n-nodes-mem0) community node brings [Mem0](https://mem0.ai) memory to [n8n](https://n8n.io). Add, search, and manage long-term memories inside any workflow, and use it as a tool for the n8n AI Agent.
## Overview
The node wraps the hosted Mem0 REST API and supports six operations on the **Memory** resource:
| Operation | Endpoint |
| --- | --- |
| **Add** | `POST /v3/memories/add/` |
| **Search** | `POST /v3/memories/search/` |
| **Get** | `GET /v1/memories/{id}/` |
| **Get Many** | `POST /v3/memories/` |
| **Update** | `PUT /v1/memories/{id}/` |
| **Delete** | `DELETE /v1/memories/{id}/` |
It is marked `usableAsTool`, so the n8n AI Agent (Tools Agent) can call it directly to remember and recall information.
## Installation
Install it like any n8n community node:
1. In n8n, go to **Settings → Community Nodes → Install**.
2. Enter `@mem0/n8n-nodes-mem0` and confirm.
The node then appears in the nodes panel under the AI category.
## Authentication
Create a **Mem0 API** credential in n8n:
- **API Key**: from the <a href="https://app.mem0.ai/dashboard/api-keys?utm_source=oss&utm_medium=integration-n8n" rel="nofollow">Mem0 API Key dashboard</a>. Sent as `Authorization: Token <key>`.
- **Base URL**: defaults to `https://api.mem0.ai`.
## Operations
### Add
Extracts and stores memories from one or more messages. Provide at least one entity id (**User ID**, or **Agent ID** / **App ID** / **Run ID** in Additional Fields); the node validates this before calling the API.
Additional Fields also expose:
| Field | Purpose |
| --- | --- |
| **Agent ID** | Scopes the memory to an agent |
| **App ID** | Scopes the memory to an app or project |
| **Run ID** | Scopes the memory to a single session or run |
| **Metadata (JSON)** | Arbitrary JSON attached to each extracted memory |
| **Infer** | On by default. Turn off to store messages verbatim instead of running LLM extraction |
| **Custom Instructions** | Free-text guidance steering what the extractor keeps or ignores, for this call |
| **Custom Categories** | JSON array of `{category: description}` objects, replacing the project-level catalog for this call |
| **Includes** | Only extract memories matching this description |
| **Excludes** | Skip memories matching this description |
**Includes** and **Excludes** filter what extraction keeps. Sending *"I am vegetarian and I never eat mushrooms. I drive a blue Toyota Corolla and my parking spot is B12"* stores three memories by default; with `Includes: "only record food and diet preferences"` it stores only the dietary one.
Extraction is asynchronous. **Wait for Completion** (on by default) polls the event until it finishes and returns the resulting memories; turn it off to return immediately with the event ID.
### Search
Semantic search over stored memories. Provide a **Query**, at least one entity id, and an optional **Limit**.
### Get Many
Lists stored memories for the entity ids you supply. Turn on **Return All** to page through every memory automatically; leave it off to fetch a single **Page**. **Page Size** applies either way.
### Entity filters on Search and Get Many
Both operations take **User ID**, **Agent ID**, **App ID**, and **Run ID**. At least one is required (the API rejects a query with no entity scope), and the node fails with a clear message before making the call if you leave all four empty.
Supply several and they are combined with **OR**, so the result set is the union of those scopes:
```json
{ "OR": [{ "user_id": "alice" }, { "agent_id": "support-bot" }] }
```
This is deliberate. Mem0 indexes each entity separately, so an `AND` across `user_id` and `agent_id` matches nothing even when a memory was written with both. To narrow rather than widen, run one operation per entity id.
### Get / Update / Delete
Operate on a single memory by **Memory ID**. Update accepts new **Text** and/or **Metadata (JSON)**.
## Choosing a `userId`
The `userId` is a stable string you choose to identify whose memories these are. It is not looked up in the dashboard. Common choices are your app's internal user ID, an email, or a UUID. Use the same value across Add, Search, and Get Many so recall works.
<CardGroup cols={2}>
<Card title="Zapier Integration" icon="bolt" href="/integrations/zapier">
Add memory to Zaps across thousands of apps
</Card>
<Card title="Flowise Integration" icon="blocks" href="/integrations/flowise">
Add memory to Flowise chatflows
</Card>
</CardGroup>
<Snippet file="star-on-github.mdx" />