Mif Tools

io.github.varun29ankuSPublished by GitHub account varun29ankuSv0.2.1Updated Oct 24, 2026

Convert, validate, and inspect AI agent memories across formats

VerifiedSTDIODesktop onlyKnowledge & MemoryAI & ML

Overview

AI-generated overview

A local MCP server that lets an assistant export, import, validate and inspect AI agent memories in the vendor-neutral MIF format.

What you can do
Export memories into the MIF JSON envelope and import them back, auto-detecting mem0, CrewAI, LangChain, generic JSON and Markdown formats. Validate memory documents, including deep checks of UUIDs, references, timestamps and embedding dimensions. Inspect memory files and list the supported formats. Preserve optional data such as memory types, tags, entities, embeddings, knowledge graphs and vendor extensions on round-trip.
When to use it
Useful when moving agent memories between systems or providers, or when you want an assistant to check and inspect memory export files before migrating them.
Requirements
Runs as a local process over stdio; install the Python package with the MCP extra and start it with the mif mcp command. No accounts, API keys or environment variables are declared.
Before you install
Memory files can contain personal or sensitive content, and the format mentions PII detection and redaction markers. Importing writes memories into the target storage, so review exports before migrating.

Installation

In SourceWeft

  1. Open Mif Tools in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Memory Interchange Format (MIF)

[PyPI] [npm] [License] [Tests] [Docs]

Your AI agent has 6 months of memories in System A. You want to try System B. Without MIF, you lose everything. With MIF:

bash
pip install mif-toolsmif convert mem0_export.json --to shodh -o memories.mif.json

Done. Your memories are portable.

What is MIF?

A vendor-neutral JSON envelope for AI agent memories. Like vCard for contacts or iCalendar for events — a minimal schema so memories move between providers without data loss.

3 required fields. That's it.

json
{  "mif_version": "2.0",  "memories": [    {      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",      "content": "User prefers dark mode across all applications",      "created_at": "2026-01-15T10:30:00Z"    }  ]}

Everything else — memory types, tags, entities, embeddings, knowledge graph, vendor extensions — is optional. Add what you have, ignore what you don't.

Install

bash
# Pythonpip install mif-tools              # core (zero dependencies)pip install mif-tools[validate]    # with JSON Schema validationpip install mif-tools[mcp]         # with MCP server
# Node.js / TypeScriptnpm install @varunshodh/mif-tools

Convert Between Formats

bash
# mem0 → MIFmif convert mem0_export.json --from mem0 -o memories.mif.json
# MIF → Markdown (Obsidian/Letta style)mif convert memories.mif.json --to markdown -o memories.md
# Auto-detect source formatmif convert any_memory_file.json -o output.mif.json
# Inspect any memory filemif inspect memories.json
# Validate MIF documentmif validate memories.mif.json

Python API

python
from mif import load, dump, convert, MifDocument, Memory
# Load from any format (auto-detects mem0, markdown, generic JSON, MIF)doc = load(open("mem0_export.json").read())print(f"{len(doc.memories)} memories loaded")
# Convert between formats in one linemarkdown = convert(data, from_format="mem0", to_format="markdown")
# Create memories from scratchdoc = 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))  # MIF v2 JSON
# Deep validation (UUIDs, references, timestamps, embedding dimensions)from mif import validate_deepok, warnings = validate_deep(open("export.mif.json").read())

Add MIF to Your MCP Server (10 lines)

python
from mif import load, dump
# Export handlerdef export_memories(user_id: str) -> str:    memories = my_storage.get_all(user_id)    return dump(memories)
# Import handler — auto-detects mem0, markdown, generic JSON, MIFdef import_memories(data: str) -> dict:    doc = load(data)    for mem in doc.memories:        my_storage.save(mem.id, mem.content, mem.created_at)    return {"memories_imported": len(doc.memories)}

Supported Formats

FormatIDAuto-detectDescription
MIF v2shodh"mif_version" in JSONNative format, lossless round-trip
mem0mem0JSON array with "memory" fieldmem0 memory exports
CrewAIcrewaiJSON array with "task_description"CrewAI LTMSQLiteStorage exports
LangChainlangchainJSON array with "namespace" + "value"LangChain/LangMem Item format
Generic JSONgenericJSON array with "content" fieldAny JSON memory array
MarkdownmarkdownStarts with ---YAML frontmatter (Letta/Obsidian style)

Full Spec

MIF supports optional fields for rich memory data:

  • Memory types — observation, decision, learning, error, context, conversation, and custom types
  • Entity references — named entities with type and confidence
  • Embeddings — model name, dimensions, vector (reuse or regenerate)
  • Knowledge graph — entities and relationships with confidence scores
  • Vendor extensions — system-specific metadata preserved on round-trip
  • Privacy — PII detection and redaction markers

Full specification: spec/mif-v2.md | JSON Schema: schema/mif-v2.schema.json

MCP Server

Expose MIF tools to any MCP-compatible AI client:

bash
pip install mif-tools[mcp]mif mcp

Tools: export_memories, import_memories, validate_memories, inspect_memories, list_formats

Adapters & Implementations

SystemStatusType
shodh-memoryProductionBuilt-in HTTP API (/api/export/mif, /api/import/mif)
mif-tools (PyPI)ProductionPython package with CLI + MCP server
@varunshodh/mif-tools (npm)ProductionTypeScript/Node.js package with CLI
mem0Adapter readyPython + npm
CrewAIAdapter readyPython + npm
LangChainAdapter readyPython + npm
Generic JSONAdapter readyPython + npm
Markdown (YAML frontmatter)Adapter readyPython + npm

Design Principles

  1. Minimal — 3 required fields. Everything else is optional.
  2. Extensible — Unknown fields and vendor extensions MUST be preserved on round-trip.
  3. Vendor-neutral — The schema doesn't favor any implementation.
  4. Forward-compatible — Importers MUST ignore unknown fields.

Contributing

We welcome adapter implementations for any memory system. See CONTRIBUTING.md.

Related

License

Apache 2.0

Source: README.md at commit 2162e8e

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.2.1LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts