langchain-memoryrouter
Persistent, user-scoped memory for LangChain and LangGraph agents, backed by MemoryRouter.
MemoryRouter gives each user in an AI product a private memory vault. This package connects that memory layer to LangChain through tools, LangGraph nodes, and a BaseStore implementation.
Install
pip install langchain-memoryrouter
Python 3.9–3.13 is supported. The package requires langchain-core>=0.3.0, langgraph>=0.2.0, and httpx>=0.25.
Create a Memory Key at app.memoryrouter.ai. In multi-user products, map each app user to a separate Memory Key so each user has a separate vault.
Choose an integration pattern
| Pattern | Best for | Memory behavior |
|---|---|---|
| Tools | Agents that should decide when to retain or recall | The model calls memoryrouter_retain or memoryrouter_recall |
| LangGraph nodes | Automatic memory on graph turns | Your graph runs recall/retain nodes directly |
MemoryRouterStore |
LangGraph code that expects a BaseStore |
Semantic retain/search rather than literal key-value storage |
Pattern 1: tools
Works with LangChain bind_tools() and LangGraph create_react_agent().
from langchain_memoryrouter import create_memory_tools
retain, recall = create_memory_tools(memory_key="mk_user_123")
model_with_tools = model.bind_tools([retain, recall])
The package exposes two tool primitives:
memoryrouter_retainstores sanitized conversation text with/v1/memory/ingestmemoryrouter_recallsearches memory with/v1/memory/search
MemoryRouter is retain and recall; this package does not add a separate reflect tool.
Pattern 2: LangGraph nodes
Use nodes when you want memory to run automatically in the graph.
from langchain_memoryrouter import create_recall_node, create_retain_node
recall_node = create_recall_node(memory_key_config_key="memory_key")
retain_node = create_retain_node(memory_key_config_key="memory_key")
result = graph.invoke(
{"messages": messages},
config={"configurable": {"memory_key": "mk_user_123", "thread_id": "chat_abc"}},
)
create_recall_node calls /v1/memory/prepare and returns a ready-to-inject memory context block. create_retain_node sanitizes conversation messages before calling /v1/memory/ingest.
Pattern 3: BaseStore
Use MemoryRouterStore when a LangGraph integration expects a LangChain BaseStore.
from langchain_memoryrouter import MemoryRouterStore
store = MemoryRouterStore(memory_key="mk_user_123")
graph = builder.compile(store=store)
MemoryRouter is semantic memory, not a literal key-value database. mset retains text into the user's vault. mget searches by key and returns the best matching memory content. The public MemoryRouter API does not expose arbitrary LangChain store-key listing or deletion, so yield_keys returns an empty iterator and mdelete is a documented no-op.
Storage hygiene
Every write path sanitizes messages before ingest. The integration stores conversation text only:
- Keeps
HumanMessagetext asuser - Keeps
AIMessagetext asassistant - Drops
SystemMessageandToolMessagecontent - Drops tool calls, tool-call IDs, and function-call arguments
- Drops AI messages that contain only tool calls and no text
This behavior is enforced in tools, nodes, and store writes; it is not a configuration option.
Never commit a Memory Key, paste one into an issue, or share private memory content in a support request. See the MemoryRouter security page or email hello@memoryrouter.ai privately.
API targeted
Base URL: https://api.memoryrouter.ai
Auth: Authorization: Bearer mk_xxx
Retain:
POST /v1/memory/ingest
{
"messages": [{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}],
"session_id": "optional",
"model": "optional",
"embeddings": "optional"
}
Recall:
POST /v1/memory/search
{"query": "what does the user prefer", "limit": 10}
Graph recall context:
POST /v1/memory/prepare
{
"messages": [{"role": "user", "content": "..."}],
"session_id": "optional",
"density": "default",
"context_limit": 10
}
For the current API surface, use the live API reference.
Support and package history
- Product and account help: hello@memoryrouter.ai
- Security reporting: memoryrouter.ai/security
- MemoryRouter company profile: LinkedIn
Changelog
0.1.2 — 2026-08-08
- Replaced package-local README links with public URLs that resolve correctly from PyPI.
0.1.1 — 2026-08-08
- Corrected official project URLs, added public-safe metadata and classifiers, and expanded integration, security, and store-semantics documentation.
0.1.0 — 2026-06-07
- Initial release with clients, tools, LangGraph nodes,
MemoryRouterStore, and write-path sanitization.
The package is maintained by MemoryRouter and available under the MIT License.
Metadata
Release files for langchain-memoryrouter 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| langchain_memoryrouter-0.1.2.tar.gz | 8.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| langchain_memoryrouter-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.0 kB
Release files / langchain_memoryrouter-0.1.2.tar.gz
| Download URL | langchain_memoryrouter-0.1.2.tar.gz |
|---|---|
| Size | 8.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2afe476ebb03a7d505d625cb4edc77726c96b6a4e5a025999fce2385ec0f6c62
|
|
BLAKE2b-256 checksum How to use checksums |
a9a1a7f2d696f3d342b754c380576de883ba28e5e9bf64794988e235cd09c946
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.2
|
Release files / langchain_memoryrouter-0.1.2-py3-none-any.whl
| Download URL | langchain_memoryrouter-0.1.2-py3-none-any.whl |
|---|---|
| Size | 10.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c9cc339cab7e7d16c9d20f71351117d7ce8191bc71b3a9be4083ca1c185465e5
|
|
BLAKE2b-256 checksum How to use checksums |
eec7e1e166df5665f251a4703c410125968c86f26f839fc5e6d6957299ef5638
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.2
|