mcal-ai-crewai
Goal-aware memory integration for CrewAI agent crews, powered by MCAL.
Installation
pip install mcal-ai-crewai
This installs mcal-ai and crewai as dependencies.
Quick Start
Using MCALStorage with CrewAI Memory
MCAL provides a storage backend that integrates directly with CrewAI's memory system:
from crewai import Crew, Agent, Task, Process
from crewai.memory.short_term.short_term_memory import ShortTermMemory
from crewai.memory.long_term.long_term_memory import LongTermMemory
from crewai.memory.entity.entity_memory import EntityMemory
from mcal_crewai import MCALStorage
# Create MCAL-backed memories
short_term = ShortTermMemory(
storage=MCALStorage(type="short_term", user_id="john")
)
long_term = LongTermMemory(
storage=MCALStorage(type="long_term", user_id="john")
)
entity_memory = EntityMemory(
storage=MCALStorage(type="entities", user_id="john")
)
# Use with CrewAI
crew = Crew(
agents=[agent],
tasks=[task],
memory=True,
short_term_memory=short_term,
long_term_memory=long_term,
entity_memory=entity_memory,
)
Using External Memory
For cross-session persistence with goal awareness:
from crewai.memory.external.external_memory import ExternalMemory
from mcal_crewai import MCALStorage
external = ExternalMemory(
embedder_config={
"provider": "mcal",
"config": {
"user_id": "john",
"llm_provider": "anthropic",
"enable_goal_tracking": True,
}
}
)
crew = Crew(
agents=[...],
tasks=[...],
external_memory=external,
process=Process.sequential,
)
What's New in 0.5.0
- Query-Aware Subgraph Retrieval — New seed-and-expand pipeline replaces 6 query-blind retrieval paths with a single query-aware pass. Reduces context tokens by 53% at 1020 turns while improving DRR by 4.5pp.
QuerySubgraphdataclass — New public API for structured subgraph results, partitioned by node type (goals, decisions, facts, entities, actions) with structural edge resolution.- Adjacency index — Lazy-built bidirectional adjacency index on
UnifiedGraphenables O(1) neighbor lookups for graph traversal. - Improved DRR at scale — CTO-1020 DRR improved from 85.3% to 89.9% (+4.6pp); CTO-300 improved from 92.2% to 94.4% (+2.2pp).
- LoCoMo-10 Evaluation — Full 10-conversation, 1,540 QA binary evaluation: 46.1% overall accuracy.
What's New in 0.4.1
- First-Class FACT Nodes — 3 new typed edges (
measures,evidence_for,quantifies) improve fact retrieval; quantitative queries automatically boost fact content - Importance Scoring Boost — FACT nodes with numeric values score higher in retrieval
search_facts()API — Filter facts by category and value range onUnifiedGraph- Version Metadata Fix —
__version__now correctly reports 0.4.1 (was stuck at 0.2.9)
What's New in 0.4.0
- Graph Compaction Fixes — Improved retrieval quality with facts-in-context, expanded edge types, chunk boost scoring
- CTO-1020 Benchmark — 85.3% decision retention over 1020 turns, 95.6% cross-era recall, 88% token reduction
- Statistical Rigor — Multi-run validation with Fisher's exact test, Wilson score confidence intervals
What's New in 0.3.0
- Expanded Relationship Edge Types — 10 new edge types (
family,friend,colleague,likes,prefers,lives_in,works_at, etc.) for richer relationship graphs - Key Facts & Entities in Search Context —
search()now surfaces extracted facts and background entities directly inresult.context - Improved Chunk Retrieval — More results returned with equal weighting; conversation excerpts prioritized in context
Older releases
What's New in 0.2.9
- Configurable Extraction Profiles — Choose
decision,conversational, orcomprehensive - Hybrid Retrieval with ChunkStore — Graph traversal + embedding search for maximum recall
- FACT/PERSON Node Protection — Graph compaction preserves factual and identity nodes
# Pass extraction profile via config
storage = MCALStorage(
type="long_term",
user_id="project_manager",
config={
"llm_provider": "anthropic",
"extraction_profile": "decision",
"enable_chunk_store": True,
}
)
Features
Goal-Aware Memory
Unlike basic memory systems, MCAL tracks user goals and priorities:
storage = MCALStorage(
type="long_term",
user_id="project_manager",
enable_goal_tracking=True,
config={
"llm_provider": "anthropic",
"embedding_provider": "openai",
}
)
Context Preservation
MCAL maintains reasoning context across agent handoffs:
# Agent 1 saves with context (sync API)
storage.save(
"Research findings on market trends",
metadata={
"agent": "researcher",
"goal": "market_analysis",
"confidence": 0.95
}
)
# Agent 2 retrieves with keyword search
results = storage.search(
"What do we know about market trends?",
limit=5,
score_threshold=0.7
)
TTL Support
Automatic expiration for short-term memories:
storage = MCALStorage(
type="short_term",
user_id="session_user",
default_ttl=3600, # 1 hour in seconds
)
Thread Safety
All operations are thread-safe via internal RLock, safe for concurrent agent access.
Configuration
Constructor Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
type |
str | required | Memory type: "short_term", "long_term", "entities", "external" |
crew |
Any | None | Optional CrewAI Crew instance |
config |
dict | None | Configuration dict (see below) |
user_id |
str | "default" |
User identifier for memory isolation |
default_ttl |
int | None | Default TTL in seconds |
enable_goal_tracking |
bool | True | Enable goal extraction from content |
Config Dictionary Keys
| Key | Type | Default | Description |
|---|---|---|---|
llm_provider |
str | "anthropic" |
LLM provider for goal extraction |
embedding_provider |
str | "openai" |
Embedding model provider |
storage_path |
str | None | Path for persistent storage |
user_id |
str | "default" |
Fallback user_id (constructor param takes priority) |
API Reference
MCALStorage
class MCALStorage:
"""MCAL storage backend for CrewAI memory."""
def save(self, value: Any, metadata: dict) -> None:
"""Save value with goal-aware processing."""
def search(
self,
query: str,
limit: int = 5,
score_threshold: float = 0.6
) -> list:
"""Search with keyword matching. Filters expired TTL entries."""
def reset(self) -> None:
"""Clear all stored memories."""
def get_all(self) -> list:
"""Return all non-expired memory items."""
def delete(self, key: str) -> None:
"""Delete a specific memory entry by key."""
Note:
MCALMemoryStorageis available as a backward-compatible alias forMCALStorage.
Comparison with Mem0
| Feature | Mem0 | MCAL |
|---|---|---|
| Basic Memory | ✓ | ✓ |
| Goal Tracking | ✗ | ✓ |
| Priority Extraction | ✗ | ✓ |
| Context Preservation | ✗ | ✓ |
| TTL Support | ✗ | ✓ |
| Local Storage | ✓ | ✓ |
| Thread Safety | — | ✓ |
| Cloud API | ✓ | Coming |
Requirements
- Python >= 3.11
- mcal-ai >= 0.2.0
- crewai >= 0.100.0
License
MIT License
Metadata
Release files for mcal-ai-crewai 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| mcal_ai_crewai-0.5.0.tar.gz | 10.0 kB | Without provenance | Details for mcal_ai_crewai-0.5.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mcal_ai_crewai-0.5.0-py3-none-any.whl | Python 3 | none | any | Details for mcal_ai_crewai-0.5.0-py3-none-any.whl |
Total release size: 18.8 kB
Release files / mcal_ai_crewai-0.5.0.tar.gz
| Download URL | mcal_ai_crewai-0.5.0.tar.gz |
|---|---|
| Size | 10.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4405df47825b1f3182263e8eff322ae73c0f74222c158ff83556da98cdbbc96f
|
|
BLAKE2b-256 checksum How to use checksums |
e30437e51ae50f8b07652e3aefa4a15f1947aaf301d30f1e0b87b93ac937ba5a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.11
|
Release files / mcal_ai_crewai-0.5.0-py3-none-any.whl
| Download URL | mcal_ai_crewai-0.5.0-py3-none-any.whl |
|---|---|
| Size | 8.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f2a515e073bfc4038839f084c571c732ecd082604dc9056243fac1d7e7c0cfa4
|
|
BLAKE2b-256 checksum How to use checksums |
3f819e0595f83716954c3484215978002a92f5ea29b11566101b5db23b39a53a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.11
|
Security for mcal-ai-crewai 0.5.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.