MIF (Memory Interchange Format) — vendor-neutral memory portability for AI agents
Project description
mif-tools
Vendor-neutral memory portability for AI agents. Convert between memory formats (mem0, markdown, generic JSON) and the Memory Interchange Format (MIF).
Install
pip install mif-tools
# With schema validation support:
pip install mif-tools[validate]
CLI
# Convert mem0 export to MIF
mif convert memories.json --from mem0 --to shodh -o memories.mif.json
# Convert with auto-detection
mif convert memories.json -o output.mif.json
# Convert MIF to markdown
mif convert memories.mif.json --to markdown -o memories.md
# Validate MIF document
mif validate memories.mif.json
# Inspect any memory file
mif inspect memories.json
# List available formats
mif formats
Python API
from mif import load, dump, convert, MifDocument, Memory
# Load from any format (auto-detects)
doc = load(open("mem0_export.json").read())
print(f"{len(doc.memories)} memories loaded")
# Access memories
for mem in doc.memories:
print(f"[{mem.memory_type}] {mem.content}")
# Convert between formats
markdown = dump(doc, format="markdown")
mif_json = dump(doc, format="shodh")
# One-liner conversion
result = convert(input_data, from_format="mem0", to_format="shodh")
# Create from scratch
doc = MifDocument(memories=[
Memory(
id="123e4567-e89b-12d3-a456-426614174000",
content="User prefers dark mode",
created_at="2026-01-15T10:30:00Z",
memory_type="observation",
tags=["preferences", "ui"],
)
])
print(dump(doc))
# Validate
from mif import validate
is_valid, errors = validate(mif_json)
Supported Formats
| Format | ID | Description |
|---|---|---|
| MIF v2 (Shodh) | shodh |
Native MIF v2 JSON, lossless round-trip |
| mem0 | mem0 |
mem0 JSON array ([{"memory": "..."}]) |
| Generic JSON | generic |
JSON array with content field |
| Markdown | markdown |
YAML frontmatter blocks (Letta/Obsidian style) |
MCP Integration
Any MCP memory server can add MIF support:
from mif import load, dump
# In your export_memories tool handler:
def handle_export(user_id: str) -> str:
memories = my_storage.get_all(user_id)
return dump(memories)
# In your import_memories tool handler:
def handle_import(data: str) -> dict:
doc = load(data) # auto-detects mem0, markdown, generic, MIF
imported = 0
for mem in doc.memories:
my_storage.save(mem.id, mem.content, mem.created_at)
imported += 1
return {"memories_imported": imported}
License
Apache 2.0
Project details
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 mif_tools-0.2.2.tar.gz.
File metadata
- Download URL: mif_tools-0.2.2.tar.gz
- Upload date:
- Size: 31.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d722cfba997f59e8318bdbdaab4b5ec303c7f3d577e9e1915e7b236db88a5029
|
|
| MD5 |
7e46331761b422b254f71db006ff6081
|
|
| BLAKE2b-256 |
b0ac76fd76b2f204fcbc24529c4a386d26bf412a19806bbddba8e73543fc0ac1
|
Provenance
The following attestation bundles were made for mif_tools-0.2.2.tar.gz:
Publisher:
publish.yml on varun29ankuS/mif-spec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mif_tools-0.2.2.tar.gz -
Subject digest:
d722cfba997f59e8318bdbdaab4b5ec303c7f3d577e9e1915e7b236db88a5029 - Sigstore transparency entry: 1050467581
- Sigstore integration time:
-
Permalink:
varun29ankuS/mif-spec@9603851a6fd554b8e075bd88222472aea238f5e5 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/varun29ankuS
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9603851a6fd554b8e075bd88222472aea238f5e5 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mif_tools-0.2.2-py3-none-any.whl.
File metadata
- Download URL: mif_tools-0.2.2-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c133cfed2a875f58d3ac0b359f77c98ce4e4e50fcd7aa49886fabccb9f925469
|
|
| MD5 |
08a78ad09eca1640874e35e26da91e12
|
|
| BLAKE2b-256 |
456c030697aa20b94859e4aa4a71d13fbac6f0ef517487cdc558b2b4be146338
|
Provenance
The following attestation bundles were made for mif_tools-0.2.2-py3-none-any.whl:
Publisher:
publish.yml on varun29ankuS/mif-spec
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mif_tools-0.2.2-py3-none-any.whl -
Subject digest:
c133cfed2a875f58d3ac0b359f77c98ce4e4e50fcd7aa49886fabccb9f925469 - Sigstore transparency entry: 1050467622
- Sigstore integration time:
-
Permalink:
varun29ankuS/mif-spec@9603851a6fd554b8e075bd88222472aea238f5e5 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/varun29ankuS
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9603851a6fd554b8e075bd88222472aea238f5e5 -
Trigger Event:
release
-
Statement type: