LangGraph integration for MCAL - Goal-aware memory for AI agents
Project description
mcal-ai-langgraph
LangGraph integration for MCAL — Goal-aware memory for AI agents.
Installation
pip install mcal-ai-langgraph
This will automatically install mcal-ai and langgraph as dependencies.
Quick Start
from mcal import MCAL
from mcal_langgraph import MCALStore
# Initialize MCAL
mcal = MCAL(llm_provider="anthropic")
# Create LangGraph-compatible store
store = MCALStore(mcal)
# Use with LangGraph
from langgraph.prebuilt import create_react_agent
agent = create_react_agent(
model=your_model,
tools=your_tools,
store=store # Goal-aware memory!
)
Features
MCALStore (BaseStore)
Drop-in replacement for LangGraph's built-in stores with goal-aware memory:
from mcal_langgraph import MCALStore
store = MCALStore(mcal)
# Store memories
await store.aput(
namespace=("user_123", "memories"),
key="decision_1",
value={"text": "Decided to use PostgreSQL for ACID compliance"}
)
# Goal-aware search — returns memories relevant to current goals
results = await store.asearch(
namespace_prefix=("user_123",),
query="database choice"
)
# Results include goal context and decisions
for item in results:
print(item.value)
MCALMemory
Memory nodes for custom LangGraph workflows:
from mcal_langgraph import MCALMemory
# Initialize with provider (uses get_mcal() factory internally)
memory = MCALMemory(llm_provider="anthropic")
# Or pass an existing MCAL instance
memory = MCALMemory(mcal=mcal, user_id="user_123")
# Add as nodes in your graph
graph.add_node("update_memory", memory.update_node())
graph.add_node("get_context", memory.context_node())
MCALCheckpointer
State persistence for LangGraph graphs:
from mcal_langgraph import MCALCheckpointer
checkpointer = MCALCheckpointer(storage_path="~/.mcal")
graph = builder.compile(checkpointer=checkpointer)
Why mcal-ai-langgraph?
| Feature | LangGraph InMemoryStore | MCALStore |
|---|---|---|
| BaseStore interface | ✅ | ✅ |
| Namespace organization | ✅ | ✅ |
| TTL support | ❌ | ✅ |
| Filter operators ($eq, $gt, etc.) | ❌ | ✅ |
| Goal-aware search | ❌ | ✅ |
| Decision tracking | ❌ | ✅ |
| Intent preservation | ❌ | ✅ |
API Reference
MCALStore
class MCALStore(BaseStore):
def __init__(self, mcal: MCAL): ...
# Async API
async def aput(self, namespace, key, value, index=None): ...
async def aget(self, namespace, key) -> Optional[Item]: ...
async def adelete(self, namespace, key): ...
async def asearch(self, namespace_prefix, /, *, query=None, filter=None, limit=10, offset=0) -> list[Item]: ...
async def alist_namespaces(self, *, prefix=None, suffix=None, max_depth=None, limit=100, offset=0) -> list[tuple[str, ...]]: ...
# Sync API (also available)
def put(self, namespace, key, value, index=None): ...
def get(self, namespace, key) -> Optional[Item]: ...
def delete(self, namespace, key): ...
def search(self, namespace_prefix, /, *, query=None, filter=None, limit=10, offset=0) -> list[Item]: ...
MCALMemory
class MCALMemory:
def __init__(
self,
mcal: Optional[MCAL] = None,
llm_provider: str = "anthropic",
embedding_provider: str = "openai",
storage_path: Optional[str] = None,
user_id: str = "default",
**mcal_kwargs,
): ...
def update_node(self) -> Callable: ...
def context_node(self) -> Callable: ...
async def add(self, messages, user_id=None): ...
async def get_context(self, query, user_id=None): ...
async def search(self, query, user_id=None, limit=5): ...
MCALCheckpointer
class MCALCheckpointer(BaseCheckpointSaver):
def __init__(self, storage_path: Optional[str] = None): ...
def get(self, config) -> Optional[dict]: ...
def put(self, config, checkpoint): ...
def list(self, config) -> list[dict]: ...
Migrating from mcal[langgraph]
If you were using the old extras-based installation:
# Old way (deprecated)
from mcal.integrations.langgraph import MCALStore
# New way (recommended)
from mcal_langgraph import MCALStore
The old import path still works but will show a deprecation warning.
Requirements
- Python >= 3.11
- mcal-ai >= 0.2.0
- langgraph >= 0.2.0
- langchain-core >= 0.3.0
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcal_ai_langgraph-0.2.5.tar.gz.
File metadata
- Download URL: mcal_ai_langgraph-0.2.5.tar.gz
- Upload date:
- Size: 14.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
588b4a740f4d6790d874a47afd04296e575f1ce952061bbccc75c6de5b8cb26a
|
|
| MD5 |
d6cecd05108b6b2649076d1f79cd317d
|
|
| BLAKE2b-256 |
fb917e73eff92e6b98e1a22ff90e1f1ffd9d5bf165fc00bc52e937c32d7a5b78
|
File details
Details for the file mcal_ai_langgraph-0.2.5-py3-none-any.whl.
File metadata
- Download URL: mcal_ai_langgraph-0.2.5-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e47876978a7f02d6b6737adc49df76127c36d940f32a449f826b8095dc426f75
|
|
| MD5 |
7467b8aa52285692e2354ae161b01735
|
|
| BLAKE2b-256 |
7845d9be096b706d793de2047e21a80927dee57dce50d37129551ed18810b759
|