memalyze について
memalyzeは、オフライン運用とアクセス管理が必要な環境向けの、AIエージェント用セルフホスト型メモリMCPサーバーです。保存前の情報マスキングと、読み取りの監査記録を備えています。
主な機能
- 01保存前のマスキングとルール設定
- 02メモリ読み取りの監査記録
- 03ローカル埋め込みとオフライン運用
- 04ベクトル検索とキーワード検索
- 054種類のMCPツール
- 06SQLite保存と論理削除
活用シーン
- 01機密値をエージェントのメモリに残さない
- 02メモリを読んだ主体を確認する
- 03クラウド接続なしでメモリを運用する
MCP 対応
stdioまたはStreamable HTTP経由で、メモリの追加、検索、削除、接続確認ツールをMCPクライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
memalyze
AI エージェント向けの MCP ネイティブなセルフホスト可能メモリ — 企業が実際に求めるガバナンスを備えています。
静的バイナリは1つ。ローカル埋め込み。クラウドも、グラフデータベースも、Python スタックも不要です。 書き込み前に必ずマスキングし、読み取りはすべて監査します。
./memalyze # MCP over stdio, for Claude Code / Cline / any harness
v0.1.0 をリリースしました — linux/darwin/windows 向けの静的 バイナリを公開し、チェックサムも併せて掲載しています。

課題
すべてのエージェントフレームワークには、それぞれ独自のメモリ機能が付属しています。あるものはベクターテーブル、別のものは JSON ファイル、また別のものはどこかに「notes」フォルダーがあります。その結果、次の3つの問題が生じ、本番環境でいずれも大きな障害になります。
- 監査できません。「先週の火曜日に、エージェントがどの顧客のデータを読み取ったのか?」に答えられないため、セキュリティレビューでプロジェクトが止まります。
- **オフラインでデプロイできません。**多くの選択肢はクラウド API を呼び出すか、実行時に HuggingFace からモデルの重みをダウンロードします。どちらも銀行、病院、工場の内部では利用できません。
- **小規模に保てません。**23個のツール、グラフデータベース、Python の依存関係ツリーが加わると、「メモリ機能」は運用すべき第2の製品になってしまいます。
memalyze はこの3つの問題だけを解決するミドルウェアです。
何が違うのか
| クラウドメモリ API | フレームワーク組み込み機能 | 個人用メモアプリ | memalyze | |
|---|---|---|---|---|
| データの保存場所 | ベンダーのクラウド | フレームワーク内 | ローカルの Markdown | 自社サーバー/自分のノート PC |
| 接続方法 | 独自 API | 1つのフレームワークに依存 | MCP | MCP、あらゆるハーネス、stdio または HTTP |
| 書き込み前のマスキング | ❌ | ❌ | ❌ | ✅ 8つのルール群、設定可能、デフォルトでは不可逆 |
| 読み取り監査 | 一部対応 | ❌ | ❌ | ✅ 追記のみ*、アクターごと、エクスポート可能 |
| オフライン | ❌ | 一部対応 | ⚠️ モデルのダウンロードが必要 | ✅ ローカル埋め込み、ネットワーク不要 |
| デプロイ | SaaS | フレームワークに付属 | Python パッケージ173個 | ✅ 静的バイナリ1つ/compose ファイル1つ |
| ツールの数 | — | — | 23個のツール | 4個のツール |
* データベーストリガーにより audit_log の UPDATE は拒否されますが、DELETE はブロックされないため、データベースファイルにアクセスできる人は行を削除できます。これは SQL レベルでの追記専用であり、WORM ではありません。削除が脅威モデルに含まれる場合は、オブジェクトロックまたは syslog ストレージにエクスポートしてください
(SECURITY.md)。
mem0 の別バージョンでも Basic Memory でもありません。どちらも記憶することに優れています。memalyze は、記憶がコモディティ化しつつあることを前提に、ガバナンス、オフライン運用、意図的に絞り込んだ機能範囲で差別化します。
30秒デモ
Ollama も、ネットワークも、MCP クライアントも不要です。
./examples/demo/demo.sh
# or: go run ./cmd/memalyze demo
電話番号、メールアドレス、住民 ID を含むメモリを書き込み、次の内容を表示します。
- 実際に保存されている内容(
13800138000ではなく[REDACTED:phone]); - 元の番号を検索しても一致件数が0件であること;
- 業務用語で検索すれば引き続き一致し、マスキング済みテキストが返されること;
- 2回の書き込みと2回の読み取りに関する監査行。
詳細と実行記録:docs/s15-redaction-audit.md。
クイックスタート
1. バイナリとローカル埋め込みモデル
ビルド済みでチェックサム検証済み(Linux/macOS 向け。Windows の場合はリリースページから .exe を取得してください):
curl -fsSL https://raw.githubusercontent.com/mahaoboy/memalyze/main/scripts/install.sh | sh
ollama pull qwen3-embedding:0.6b # ~640 MB, 1024-dim, strong on Chinese
memalyze --version
ソースからビルドする場合(Go 1.27+):make build を実行し、その後 ./memalyze --version を実行します。
2. ハーネスに接続する
Claude Code(プロジェクトスコープ):
claude mcp add --scope project memalyze -- "$(pwd)/memalyze"
cp examples/claude-code/CLAUDE.md ./CLAUDE.md # makes Claude search before answering
Cline:examples/cline/cline_mcp_settings.json と .clinerules をコピーします。
汎用ハーネス:examples/custom-harness/ — プロンプトの仕様と疑似コードを用意しています。すべての設定については、examples/README.md をご覧ください。
3. または、Claude Desktop でワンクリック(MCPB)
リリース v0.1.0 からお使いのプラットフォーム用のバンドルをダウンロードして開いてください。
Claude Desktop にインストール画面が表示され、memalyze.db の保存先を尋ねられます。
| プラットフォーム | ファイル |
|---|---|
| macOS Apple Silicon | memalyze-0.1.0-darwin-arm64.mcpb |
| macOS Intel | memalyze-0.1.0-darwin-amd64.mcpb |
| Windows x64 | memalyze-0.1.0-windows-amd64.mcpb |
| Linux x64 | memalyze-0.1.0-linux-amd64.mcpb |
内部のバイナリは、上記と同じ v0.1.0 ビルドです。これらのバンドルは公開されたばかりで、実際の macOS/Windows デスクトップではまだ開かれていません。インストール画面が表示されない場合は、通常のバイナリを使用してください。このサーバーは MCP Registry にも掲載されています。
4. または、Docker で実行(memalyze + Ollama + モデルの取得)
printf 'MEMALYZE_HTTP_TOKEN=%s\n' "$(openssl rand -hex 24)" > .env
docker compose up -d --build
curl -s http://127.0.0.1:8080/healthz # {"status":"ok","version":"dev"}
Authorization: Bearer $MEMALYZE_HTTP_TOKEN を指定して、Streamable-HTTP MCP クライアントから http://127.0.0.1:8080/mcp に接続します。詳しくは docs/s16-docker.md を参照してください。
ツール
意図的に4つだけにしています。ツールが増えるたびに、モデルが判断しなければならないことも増えます。
| ツール | 機能 | 特筆すべき動作 |
|---|---|---|
memory_add | メモリを保存します | 重複する場合は既存の ID を返します。埋め込みに失敗してもメモリは保持されます(embedding_failed=true)。redacted とルール名を返します |
memory_search | メモリを取得します | ベクトル検索を優先し、キーワードで補完します。ベクトル検索が利用できない場合は degraded と degrade_reason を返します。空のクエリでは最近の項目を一覧表示します |
memory_delete | 論理削除します | すでに削除済みの ID に対しては冪等です。不明な ID の場合はツールエラーを返します |
echo | 接続を確認します | MCP リンクが機能していることを確認します。ビジネスロジックはありません |
memory_context ツールはありません。memory_search はプロンプトに貼り付けられるテキストをすでに返し、機能が重複する2つのツールがあるとモデルの選択が難しくなるためです(D-017)。
ガバナンス
マスキング(書き込みパス)。 ルールは、重複排除、FTS、埋め込み処理の前に memory.Service.Add で実行されるため、平文がメインテーブル、全文インデックス、ベクトルに到達することはありません。
| ルール | 入力例 | 保存形式 |
|---|---|---|
private_key_block | -----BEGIN RSA PRIVATE KEY-----… | [REDACTED:private_key] |
id_card_cn | 110101199003071234 | [REDACTED:id_card] |
bank_card | 6222021234567890123 | [REDACTED:bank_card] |
jwt | eyJhbGciOi… | [REDACTED:jwt] |
api_key_known_prefix | sk-…、ghp_…、AKIA… | [REDACTED:api_key] |
credential_assignment | api_key=abcdef123456 | api_key=[REDACTED:credential] |
email | [email protected] | [REDACTED:email] |
phone_cn | +86 13800138000 | [REDACTED:phone] |
モード:enforce(デフォルト)、dry-run(調整用。件数のみカウント)、off(デバッグ用)。
カスタムルールパックは JSON 形式です:examples/redaction-rules.json。
監査(読み取りパス)。 追記専用の audit_log(データベーストリガーにより UPDATE を拒否します)に、actor、tenant、scope、action、memory ID、タイムスタンプ、結果件数、degraded、マスキング件数が記録されます。検索テキスト自体は、明示的に MEMALYZE_AUDIT_QUERY_PLAIN=1 を設定しない限り、SHA-256 と長さとして保存されます。
memalyze audit export --from 2026-10-01 --to 2026-10-31 --format csv --out audit.csv
memalyze audit export --tenant acme --format json
まだ対応していない機能: ユーザーごとの認証(プロセスごとに1つのトークンを使用し、actor は環境変数から取得)、監査ログの保持/消去、マスキングの解除、監査 UI。
検索精度の実測値
60件のメモリを含む中国語コーパスで、16件のクエリを使ってS8で測定した数値です。推定値ではありません
(docs/s8-retrieval-report.md):
| アプローチ | recall@3 | MRR |
|---|---|---|
qwen3-embedding:0.6b(デフォルト) | 0.94 | 0.92 |
| CJK bigram FTS5(キーワードの補完検索) | 0.88 | — |
nomic-embed-text | 0.47 | — |
設計に影響した、直感に反する知見が2つあります。SQLite FTS5のデフォルトのトークナイザーは中国語をまったく検索できず、bigramテキストを保存するまでリコールは0.19でした。また、RRFフュージョンのスコアはベクトル検索のみの場合より低かったため、v0.1ではフュージョンを行いません。D-012を参照してください。
レイテンシ(S14、コールドスタートを固定):バックグラウンドでのウォームアップに37.8秒かかり、その後の検索はdegraded=falseで1.14秒です。5分間アイドル状態が続いた後も、新しいプロセスは1.52秒で応答します。ベクトル検索が利用できない場合、検索は応答せずに停止するのではなく、3秒以内にキーワード検索へフォールバックします(D-015/D-018)。
仕組み
harness (Claude Code / Cline / your agent)
│ MCP: stdio or Streamable HTTP
▼
internal/mcp 4 tools, argument conversion only
▼
internal/memory redact → dedup → store → embed; search: vector → keyword → degraded
├── internal/govern rule engine (8 families, JSON configurable)
├── internal/store interface; sqlite impl (memories, embeddings, audit_log)
├── internal/embed float32 BLOB codec, cosine; Ollama client
└── internal/search CJK bigram tokenizer + FTS5 MATCH builder
- ULID ID、重複排除用の部分ユニークインデックス、論理削除、TTLを備えたSQLite(WAL)。
- ベクトルはリトルエンディアンの
float32BLOBです。検索には総当たりコサイン類似度を使います(約1万件未満のメモリなら十分であり、単一バイナリ設計の正直な限界です)。 - スキーマのマイグレーションは
PRAGMA user_versionでバージョン管理されています(v1 → v2では監査テーブルを追加)。
運用
memalyze audit export --from 2026-10-01 --format csv --out audit.csv # who read what
memalyze backup --out /var/backups/memalyze-$(date +%F).db # consistent snapshot
memalyze health --url http://127.0.0.1:8080/healthz # probe
- systemd:
deploy/systemd/memalyze.service+docs/s16-systemd.md(セキュリティ強化済みのユニット、環境変数ファイル、バックアップタイマー)。 - Docker:
docs/s16-docker.md。 backupはVACUUM INTOを使用するため、WAL使用中でも一貫性のあるスナップショットを作成し、監査テーブルも含めます。既存ファイルの上書きは拒否します。
設定
すべて環境変数で設定でき、デフォルト値のままですぐに使用できます。
| 変数 | デフォルト | 意味 |
|---|---|---|
MEMALYZE_DB | ./memalyze.db | SQLiteのパス |
MEMALYZE_TENANT | default | ツール呼び出し時のデフォルトテナント |
MEMALYZE_OLLAMA_URL | http://127.0.0.1:11434 | ローカルの埋め込みエンドポイント |
MEMALYZE_EMBED_MODEL | qwen3-embedding:0.6b | 埋め込みモデル |
MEMALYZE_QUERY_TIMEOUT | 3s | フォールバック前のベクトル検索の制限時間 |
MEMALYZE_KEEP_ALIVE | 30m | Ollamaモデルの常駐時間 |
MEMALYZE_REDACT_MODE | enforce | enforce / dry-run / off |
MEMALYZE_REDACT_RULES | (組み込み) | JSONルールパックへのパス |
MEMALYZE_AUDIT | on | 監査行を追記 |
MEMALYZE_ACTOR | local | 監査ログに記録するアクター |
MEMALYZE_AUDIT_QUERY_PLAIN | off | クエリテキストを保存(デフォルト:ハッシュのみ) |
MEMALYZE_HTTP_ADDR | (空 = stdio) | Streamable HTTPの場合は、例::8080 |
MEMALYZE_HTTP_TOKEN | (空) | Bearerトークン。ループバック以外にバインドする場合は必須 |
ステータス
現状を正直に示しています。これは初期段階のプロジェクトであり、1.0ではありません。
| マイルストーン | 状態 |
|---|---|
| M0 立項与定位 (S1–S4) | ✅ |
| M1 备料与技术验证 (S5–S8) | ✅ |
| M2 核心链路 (S9–S14) | ✅ |
| M3 打磨与文档 (S15–S19) | ✅ S15 governance, S16 Docker, S17 docs, S18 tests+CI, S19 examples |
| M4 发布 (S20–S23) | 🟡 S20 ✅, S21 ✅ (v0.1.0 public), S22 GitHub ✅ / HN·Reddit·V2EX pending, S23 ⬜ |
| M5 复盘 (S24) | ⬜ needs real users |
| M5 复盘 (S24) | ⬜ |
既知の課題:ユーザーごとの認証がないこと、監査ログの保持機能がないこと、DockerイメージをCIでビルドしていないこと(開発環境にデーモンがないため)、ベクトル検索が総当たりであること、中国語を優先したデフォルト設定(英語も使えますが、トークナイザーはCJK向けに調整されています)。
ドキュメント
| ドキュメント | 内容 |
|---|---|
docs/s15-redaction-audit.md | ルール、モード、監査スキーマ、デモのトランスクリプト |
docs/s16-docker.md | Compose スタック、トークンポリシー、検証状況 |
docs/s16-systemd.md | 強化された systemd ユニット、環境ファイル、バックアップ/復元 |
docs/s8-retrieval-report.md | 11 種類の検索手法と、この手法が選ばれた理由 |
docs/s13-context-injection.md | モデルに検索させるためのプロンプト契約 |
docs/s14-end-to-end.md | 実際のハーネス、2 つのセッション、コールドスタート時の数値 |
docs/s21-distribution.md | リリース成果物、配布チャネル、リリース後のチェックリスト |
docs/s21-submissions.md | MCP ディレクトリと ClawHub にそのまま貼り付けられるエントリー |
docs/s23-feedback-log.md | フィードバックの記録(現時点では本当に空です) |
docs/s24-review.md | マイルストーンレビューのテンプレート(未記入) |
SECURITY.md | 脅威モデル:防御対象と対象外 |
対象外
- SaaS ではありません。セルフホストで利用でき、こちらがお客様のデータを保持することはありません。
- エージェントフレームワークではありません。ハーネスを引き継ぐことはありません。
- ナレッジグラフではありません。エンティティ抽出パイプラインもグラフデータベースもありません。
- 機能を最大限に詰め込んだものではありません。ツールは 4 つ、バイナリは 1 つで、オペレーターが必要となる機能は断固として追加しません。
ライセンス
AGPL-3.0-or-later(LICENSE)。クローズド製品への組み込み向けの商用ライセンスについては、
commercial license をタイトルとして Issue を作成してください。
コントリビューションについては CONTRIBUTING.md をご覧ください。セキュリティ報告については
SECURITY.md をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。