mif-tools について
mif-toolsは、AIエージェントのメモリーをベンダー中立のMIF形式で変換、検証、確認するCLIとライブラリです。複数のメモリー出力形式に対応し、MCPサーバーでメモリーをインポート、エクスポートできます。
主な機能
- 01MIF、mem0、CrewAI、LangChain、汎用JSON、Markdown間の変換
- 02対応する入力形式の自動判定
- 03メモリードキュメントの検証と確認
- 04任意のメタデータとベンダー拡張の保持
- 05PythonとTypeScriptのパッケージおよびCLI
活用シーン
- 01異なるエージェントのメモリープロバイダー間でデータを移行
- 02メモリー出力をObsidianやLetta向けのMarkdownに変換
- 03MIF仕様に沿ってメモリードキュメントを確認
MCP 対応
オプションのMCPサーバーは、MCPクライアントにメモリーのエクスポート、インポート、検証、確認、形式一覧のツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Memory Interchange Format(MIF)
AI エージェントがシステム A に6か月分のメモリーを保存しています。システム B を試したいと思っています。MIF がなければ、すべて失われます。MIF があれば:
pip install mif-tools
mif convert mem0_export.json --to shodh -o memories.mif.json
これで完了です。メモリーを移行できます。
MIF とは?
AI エージェントのメモリー向けの、ベンダーに依存しない JSON エンベロープです。連絡先の vCard やイベントの iCalendar のように、プロバイダー間でデータを損失することなくメモリーを移行するための最小限のスキーマです。
必須フィールドは3つだけです。
{
"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"
}
]
}
それ以外のすべて(メモリーの種類、タグ、エンティティ、埋め込み、ナレッジグラフ、ベンダー拡張)は任意です。必要なものを追加し、不要なものは無視できます。
インストール
# Python
pip install mif-tools # core (zero dependencies)
pip install mif-tools[validate] # with JSON Schema validation
pip install mif-tools[mcp] # with MCP server
# Node.js / TypeScript
npm install @varunshodh/mif-tools
フォーマット間の変換
# mem0 → MIF
mif 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 format
mif convert any_memory_file.json -o output.mif.json
# Inspect any memory file
mif inspect memories.json
# Validate MIF document
mif validate memories.mif.json
Python API
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 line
markdown = convert(data, from_format="mem0", to_format="markdown")
# Create memories 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)) # MIF v2 JSON
# Deep validation (UUIDs, references, timestamps, embedding dimensions)
from mif import validate_deep
ok, warnings = validate_deep(open("export.mif.json").read())
MCP サーバーに MIF を追加(10行)
from mif import load, dump
# Export handler
def export_memories(user_id: str) -> str:
memories = my_storage.get_all(user_id)
return dump(memories)
# Import handler — auto-detects mem0, markdown, generic JSON, MIF
def 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)}
対応フォーマット
| フォーマット | ID | 自動検出 | 説明 |
|---|---|---|---|
| MIF v2 | shodh | JSON 内の "mif_version" | ネイティブフォーマット、損失のない往復変換 |
| mem0 | mem0 | "memory" フィールドを含む JSON 配列 | mem0 のメモリーエクスポート |
| CrewAI | crewai | "task_description" を含む JSON 配列 | CrewAI LTMSQLiteStorage のエクスポート |
| LangChain | langchain | "namespace" と "value" を含む JSON 配列 | LangChain/LangMem Item フォーマット |
| Generic JSON | generic | "content" フィールドを含む JSON 配列 | あらゆる JSON メモリー配列 |
| Markdown | markdown | --- で始まる | YAML フロントマター(Letta/Obsidian スタイル) |
完全な仕様
MIF は、豊富なメモリーデータに対応する任意フィールドをサポートしています。
- メモリーの種類 —
observation、decision、learning、error、context、conversation、およびカスタムタイプ - エンティティ参照 — タイプと信頼度を持つ名前付きエンティティ
- 埋め込み — モデル名、次元数、ベクトル(再利用または再生成)
- ナレッジグラフ — 信頼度スコア付きのエンティティと関係性
- ベンダー拡張 — システム固有のメタデータを往復変換時に保持
- プライバシー — PII の検出とマスキングマーカー
完全な仕様:spec/mif-v2.md | JSON Schema:schema/mif-v2.schema.json
MCP サーバー
MIF ツールを、MCP 互換のあらゆる AI クライアントに公開できます。
pip install mif-tools[mcp]
mif mcp
ツール:export_memories、import_memories、validate_memories、inspect_memories、list_formats
アダプターと実装
| システム | ステータス | 種類 |
|---|---|---|
| shodh-memory | 本番環境対応 | 組み込み HTTP API(/api/export/mif、/api/import/mif) |
| mif-tools (PyPI) | 本番環境対応 | CLI と MCP サーバーを備えた Python パッケージ |
| @varunshodh/mif-tools (npm) | 本番環境対応 | CLI を備えた TypeScript/Node.js パッケージ |
| mem0 | アダプター対応済み | Python + npm |
| CrewAI | アダプター対応済み | Python + npm |
| LangChain | アダプター対応済み | Python + npm |
| Generic JSON | アダプター対応済み | Python + npm |
| Markdown(YAML フロントマター) | アダプター対応済み | Python + npm |
設計原則
- 最小限 — 必須フィールドは3つです。それ以外はすべて任意です。
- 拡張可能 — 未知のフィールドとベンダー拡張は、ラウンドトリップ時に保持しなければなりません。
- ベンダー中立 — スキーマは特定の実装を優遇しません。
- 前方互換性 — インポーターは未知のフィールドを無視しなければなりません。
貢献
あらゆるメモリシステム向けのアダプター実装を歓迎します。CONTRIBUTING.mdをご覧ください。
関連リンク
- ドキュメント — ドキュメントサイト全体
- MCP SEP #2342 — Model Context Protocolへの元の提案
- tower-mcp #531 — tower-mcpでの追跡課題
- shodh-memory — リファレンス実装(Rust)
- PyPIのmif-tools — Pythonパッケージ
- npmの@varunshodh/mif-tools — npmパッケージ
ライセンス
Apache 2.0
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。