pmll-memory-mcp について
pmll-memory-mcpは、コーディングエージェント向けの永続コンテキストメモリサーバーです。セッション分離型の短期KVメモリと任意の長期グラフを組み合わせ、Q-promiseで重複を抑えます。
主な機能
- 01セッション分離型KVメモリ
- 02Q-promiseによる重複排除
- 03SQLiteプロパティグラフ
- 04セマンティック検索と時間減衰
- 05統合コンテキスト検索と昇格
活用シーン
- 01タスク開始時のメモリ初期化
- 02高コストなツール実行前のキャッシュ確認
- 03セッションをまたいだ頻出情報の検索
MCP 対応
MCP サーバーとして、短期メモリ、長期グラフメモリ、統合コンテキスト解決のツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
5掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| silo_size | integer | いいえ | KV スロットの最大数(memory_silo_t.size と同じです)。 |
| session_id | string | はい | このエージェントタスクの一意な識別子(例:UUID)。 |
詳細
PPM — Python Package Manager
pypm パッケージング CLI と、共有 PMLL メモリーおよび Q-promise を提供します。関連プロジェクト:drQedwards/pmll。
稼働中の Stellar pmll-anchor ID:docs/STELLAR.md · スキル:SKILL.md · プロミス:Q_promise_lib/README.md。
要約:PPM は Python をパッケージ化します(C CLI)。共有 PMLL は メモリー/状態(
memory_silo_t、完全一致のpeekとセマンティック検索のpeek_semantic、 SAT ブリッジ、init_pml)を担います。Q-promise は 時間/制御フロー(qpromise_*、libqpromise.so)を担い、 サイロを置き換えるものではありません。オプションの Stellar コミットメントは、pmll-anchorを介してオフチェーンのCodeworkPayloadを 32 バイトのダイジェストにハッシュ化します(ABI:init/store/get/bump)。 関連するパッケージング CLI と MCP メモリーサーバーは、リポジトリ内にあります。
PMLL はエージェントのワークフロー向けに永続的な構造化メモリーを提供します。また、PPM パッケージング CLI (再現可能なバンドル、プラグイン、署名)と PMLL Memory MCP サーバーも提供します。 長期グラフツールはContext+を応用しています。
目次
- レイヤー(マージ後)
- 機能
- ソースからのビルド
- CLI コマンド
- GPU とセキュリティ機能
- プラグインシステム
- 設定
- PMLL Memory MCP サーバー
- Stellar コミットメント
- アーキテクチャ
- リリースノート
- ロードマップ
- コントリビューションとスポンサー
レイヤー(マージ後)
互いを補完する 2 つのレイヤーであり、互いの代替ではありません。
| レイヤー | 担当 | 主なインターフェース |
|---|---|---|
| PMLL | 永続メモリー/状態 | memory_silo_t、peek / peek_semantic、silo_set、SAT ブリッジ、init_pml |
| Q-promise | 時間/制御フロー | qpromise_* API、libqpromise.so、遅延実行される qpromise_drain() |
Q-promise はサイロを置き換えるものではありません。プロミスはメモリーキー(および任意の SAT 状態 ID)を参照できます。結果は silo_set / qpromise_resolve_commit で書き戻されます。
想定されるループ
retrieve (peek / peek_semantic)
→ compute / request work
→ promise PENDING
→ resolve / reject (optionally resolve_commit → silo)
→ continuation (then / catch / finally via qpromise_drain)
→ memory update
→ retrieve again
スレッドセーフ性: C の Q-promise drain はシングルスレッドです。継続処理は呼び出し元のスレッド上で qpromise_drain() の実行中にのみ行われます。呼び出し元はアクセスを外部で直列化する必要があります。詳細:Q_promise_lib/README.md。
C コア(PMLL)
ヘッダー:PMLL.h · 実装:PMLL.c
| シンボル | 役割 |
|---|---|
memory_silo_t | 連想/セマンティックサイロ:tree、slots[]、embed_dim(PMLL_EMBED_DIM=32)、slot_count |
silo_slot_t | key、content、embedding、resolved |
init_silo / free_silo / silo_set | 割り当て、解放、キー/コンテンツと埋め込みの書き込み |
peek | キーを完全一致で検索し、なければインデックスで検索 |
peek_semantic | 埋め込みに対するコサイン類似度 ≥ min_sim(silo_embed_text、silo_cosine_similarity) |
init_pml | すべての assignment[i] = -1 を設定(未決定) |
check_conflict | -1 を未決定として扱います(ゼロ初期化による固定の false 扱いにはしません) |
sat_bridge_* | 3SAT トークンをサイロ内の連想文字列リテラルに対応付けます |
Q-promise ライブラリ
ビルド/テスト/API:Q_promise_lib/README.md(正式な仕様)。公開シンボルは qpromise_*、共有オブジェクトは libqpromise.so です。以前のプロトタイプ(QMemNode / q_mem_* / メモリーチェーンウォーカー)は削除されました。Q_promises.h は qpromise.h にリダイレクトする互換用インクルードです。
✨ 機能
| コマンド | 内容 |
|---|---|
pypm doctor | Python ヘッダー、C コンパイラー、OpenSSL、WASI ツールチェーン、GPU などをチェックします |
pypm sandbox [-d DIR] | 一時ディレクトリ(または指定した DIR)に、フルシェルを備えた環境を用意します |
pypm plugin add NAME SRC | .so プラグインを URL またはパスからダウンロードし、~/.pypm/plugins/ に配置します |
pypm plugin run NAME … | 名前を指定したプラグイン内で pypm_plugin_main() を実行します |
pypm pypylock [-o FILE] | すべての wheel とインタープリターを dist/venv.tar.gz(または FILE)にまとめます |
pypm version | 現在の CLI バージョンを表示します |
ppm import PKG | GPU アクセラレーションによるハッシュ検証を行い、パッケージをインポートしてキャッシュします |
ppm add PKG --lock | パッケージを追加し、ロックファイルを更新します |
ppm plan / ppm apply | 依存関係の変更を計画し、監査証跡を残して適用します |
ppm snapshot / ppm rollback | 環境のスナップショットを作成し、任意の以前の状態にロールバックします |
ppm sign / ppm verify | アーティファクトに署名(Ed25519)し、暗号学的なレシートを検証します |
ppm sbom | ソフトウェア部品表(SBOM)を生成します |
開発予定: SAT 依存関係ソルバー(スタンドアロンの SAT.c CDCL ソルバーは存在しますが、依存関係の解決にはまだ使用されていません)、並列 wheel キャッシュ、単一のロックファイルを使うワークスペース、WASM wheel の解決、Conda と Poetry のインポートプラグイン。
🔧 ソースからのビルド
システム依存関係
- C11 コンパイラー(
gcc、clang、または MSVC) libcurl(プラグインのダウンロード用)libdl(動的ロード用。Linux / macOS では標準)tar/libarchive(任意。pypylockバンドル用)
ビルドと初回実行
git clone https://github.com/drQedwards/PPM.git
cd PPM
cc -Wall -Wextra -ldl -lcurl -o pypm Ppm.c
./pypm doctor # Diagnose your dev box
./pypm sandbox # Spin up a throw-away REPL playground
Q-promise 共有ライブラリ
cd Q_promise_lib
make clean && make test
make shared # → libqpromise.so
cd ..
任意:CUDA アクセラレーション対応ビルド
nvcc -O3 CLI/CLI.cu -lcuda -o ppm-gpu
./ppm-gpu import transformers torch --verbose
🖥 CLI コマンド
パッケージのインポート
# Import a single package
ppm import transformers
# Import with a specific version
ppm import transformers==4.43.3
# Import multiple packages
ppm import transformers torch numpy
# Scan a Python file for imports and install them
ppm import --from-file my_script.py
# Verbose — watch what's happening
ppm import transformers --verbose
# 🔍 Resolving transformers...
# ⬇️ Downloading transformers-4.43.3-py3-none-any.whl
# 🔐 GPU integrity check: PASSED
# ✅ transformers==4.43.3 imported successfully
プロジェクトの初期化
ppm init
# Creates:
# .ppm/
# ├── ledger.jsonl ← append-only operation log
# ├── state.json ← current state
# ├── lock.json ← dependency lockfile
# └── snapshots/ ← rollback points
依存関係の解決とロック
ppm add transformers torch==2.4.0 --lock
ppm plan
# { "plan": "install", "packages": { "transformers": "4.43.3", ... } }
ppm apply --note "Added ML stack"
スナップショットとロールバック
ppm snapshot --name "before-upgrade"
ppm snapshots
ppm rollback before-upgrade
環境の診断
ppm doctor
# ✅ Python dev headers found
# ✅ C compiler available
# ✅ CUDA toolkit available
# 🏁 Diagnostics complete (0 issues found)
サンドボックス
ppm sandbox # ephemeral temp directory
ppm sandbox -d /tmp/mydir # custom directory
ハーメチックなパッケージ化
ppm pypylock -o production-env.tar.gz
🔐 GPU とセキュリティ機能
GPU アクセラレーションによるハッシュ検証
ppm import torch --verbose
# 🚀 GPU hash verification: SHA-256 computed on device
# ✅ Integrity verified: e3b0c44298fc1c149afbf4c8996fb924...
GPU バックエンドの選択
ppm ensure transformers --gpu auto # auto-detect CUDA
ppm ensure transformers --gpu cu121 # force CUDA 12.1
ppm ensure transformers --gpu cpu # CPU-only
Ed25519 暗号署名
ppm keygen --out-priv ed25519.priv --out-pub ed25519.pub
ppm sign --sk ed25519.priv --file torch-2.4.0-*.whl --gpu ./libbreath_gpu.so
ppm verify --receipt torch-2.4.0-*.whl.receipt.json --file torch-2.4.0-*.whl
プロベナンスと SBOM
ppm sbom --out project-sbom.json
ppm provenance --out provenance.json
ppm graph --dot | dot -Tpng -o deps.png
🔌 プラグインシステム
# Install a plugin
ppm plugin add auditwheel https://cdn.example.com/auditwheel.so
# Run it
ppm plugin run auditwheel repair --wheel torch-2.4.0-cp310-linux_x86_64.whl
プラグインの作成(C)
// hello.c
#include <stdio.h>
int pypm_plugin_main(int argc, char **argv) {
puts("Hello from a plugin 👋");
return 0;
}
cc -shared -fPIC -o hello.so hello.c
mv hello.so ~/.pypm/plugins/
pypm plugin run hello
⚙️ 設定
pypm.toml
[tool.ppm]
python = "^3.10"
default_gpu = "auto"
[tool.ppm.backends]
cpu.index = "https://download.pytorch.org/whl/cpu"
cu121.index = "https://download.pytorch.org/whl/cu121"
cu122.index = "https://download.pytorch.org/whl/cu122"
torch_prefer = "2.4.*"
transformers_prefer = "4.43.*"
環境変数
export PYP_WORKSPACE_ROOT=/path/to/project # override workspace detection
export PYP_DEBUG=1 # enable debug output
export CUDA_VISIBLE_DEVICES=0 # control GPU usage
🧠 PMLL Memory MCP サーバー
短期 KV コンテキストメモリ、Q-promise による重複排除、Context+ の長期メモリーグラフを備えた永続メモリロジックループです。コーディングエージェントのコンテキスト保持と検索を向上させるよう設計されています。
pmll-memory-mcp は、短期 KV レイヤーと任意の長期グラフレイヤーを組み合わせた Model Context Protocol(MCP)サーバーです。サーバーの構築には MCPServer(mcp 2.x)を優先し、利用できない場合は FastMCP(mcp 1.x)にフォールバックします。詳しくは mcp/pmll_memory_mcp/server.py をご覧ください。
コード上のツール名を確認してください。TypeScript(mcp/src/index.ts)には graphql や create_relation など、15 個のツールがあります。Python(mcp/pmll_memory_mcp/server.py)には 14 個のツールがあり(graphql はありません)、create_memory_relation など、より長い名前のツールがいくつかあります。Ppm-lib/pmll_mcp/ の ctypes デモでは、qpromise_* を介して libqpromise.so を読み込みます。
メモリレイヤー:
- 短期 KV キャッシュ(5 個のツール) — Q-promise による重複排除機能を備えた、セッションごとに分離されたキー・バリュー型メモリです。
PMLL.c::memory_silo_tを反映しています。 - 長期メモリーグラフ(6 個のツール) — @ForLoopCodes による Context+ をベースにしたもので、SQLite を基盤とするプロパティグラフを提供します。型付きノード、重み付きエッジ、時間減衰スコアリング(e^(-λt))、安定したハッシュ埋め込みによるセマンティック検索を備えています。
- ソリューションエンジン(3 個のツール) — 両方のレイヤーを統合コンテキスト解決(短期 → 長期 → 見つからない)で連携させ、頻繁にアクセスされるエントリを自動昇格し、統合メモリステータスビューを提供します。
このサーバーは、Playwright やその他の MCP ツールと並ぶ 3 番目の初期化ツールとして設計されています。エージェントの各タスクの開始時に一度読み込まれます。エージェントはタスク開始時に init を一度呼び出し、重複した呼び出しを避けるため、負荷の高い MCP ツールを呼び出す前に peek を使用します。頻繁にアクセスされるエントリは長期メモリーグラフに昇格され、セッションをまたいだセマンティック検索が可能になります(SQLite を基盤とするグラフ)。
ツール数は実装によって異なります(TS は graphql を含む 15 個、Python は 14 個です。上記の注記をご覧ください)。以下の過去のドキュメントには、TypeScript のツール一覧が記載されています。
プレミアムな 3 番目の初期化ツールである理由
最新の Claude エージェントのタスクでは、Playwright、ファイルシステムツール、その他の MCP サーバーが日常的に呼び出されます。共有メモリレイヤーがなければ、各サブタスクで同じコンテキストを毎回最初から再初期化することになります。pmll-memory-mcp は、2 つの相補的なメモリレイヤーによって、このオーバーヘッドを解消します。
Agent task start
├── 1st init: Playwright MCP
├── 2nd init: Unstoppable Domains MCP (see unstoppable-domains/)
└── 3rd init: pmll-memory-mcp ← this server
├── Short-term: all tool calls go through peek() first
└── Long-term: frequently accessed entries auto-promote to graph
peek() パターン
負荷の高い すべての MCP ツールを呼び出す前に、エージェントはキャッシュを確認するため peek を呼び出します。
// Pseudocode — what the agent does automatically via MCP tool calls
// 1. Check cache before navigating
const result = mcp.call("pmll-memory-mcp", "peek", { session_id: sid, key: "https://example.com" });
if (result.hit) {
const pageContent = result.value; // ← served from PMLL silo, no browser needed
} else {
// 2. Cache miss — do the real work
const pageContent = mcp.call("playwright", "navigate", { url: "https://example.com" });
// 3. Populate the cache for future agents / subtasks
mcp.call("pmll-memory-mcp", "set", {
session_id: sid,
key: "https://example.com",
value: pageContent,
});
}
ツールリファレンス(15 個のツール)
短期 KV メモリ(5 ツール)
| ツール | 入力 | 出力 | 説明 |
|---|---|---|---|
init | session_id: str、silo_size: int = 256 | {status, session_id, silo_size, cleared} | セッションのサイロと Q promise の状態を設定またはリセットします(cleared は常に true です) |
peek | session_id: str、key: str | {hit, value?, index?} または {hit, status, promise_id} | キャッシュと promise を非破壊的に確認します |
set | session_id: str、key: str、value: str | {status: "stored", index} | サイロに KV ペアを保存します |
resolve | session_id: str、promise_id: str | {status: "resolved"|"pending", payload?} | Q promise の継続を確認または解決します |
flush | session_id: str | {status: "flushed", cleared_count} | タスク完了時にすべてのサイロスロットをクリアします |
GraphQL(1 ツール)
| ツール | 入力 | 出力 | 説明 |
|---|---|---|---|
graphql | query: str、variables?: object、operationName?: str | {data} または {errors} | メモリストアに対して GraphQL クエリ/ミューテーションを実行します |
長期メモリーグラフ(6 個のツール — Context+ をベースにしています)
これらのツールは、@ForLoopCodes による Context+ をベースにしており、グラフ走査、減衰スコアリング、コサイン類似度検索に対応した SQLite ベースのセマンティックメモリーを提供します。
| ツール | 入力 | 出力 | 説明 |
|---|---|---|---|
upsert_memory_node | session_id、type、label、content、metadata? | {node} | 安定したハッシュ埋め込みを自動生成して、メモリーノードを作成または更新します |
create_relation | session_id、source_id、target_id、relation、weight?、metadata? | {edge} | 型付きエッジを作成します(relates_to、depends_on、implements、references、similar_to、contains) |
search_memory_graph | session_id、query、max_depth?、top_k?、edge_filter? | {direct, neighbors, totalNodes, totalEdges} | グラフ走査によるセマンティック検索 — 直接一致と近傍の探索 |
prune_stale_links | session_id、threshold? | {removed, remaining} | 減衰したエッジ(e^(-λt) がしきい値未満)と、アクセス頻度の低い孤立ノードを削除します |
add_interlinked_context | session_id、items[]、auto_link? | {nodes, edges} | ノードを一括追加し、類似度に基づいて自動リンクします(コサイン類似度 ≥ 0.72 でエッジを作成) |
retrieve_with_traversal | session_id、start_node_id、max_depth?、edge_filter? | [{node, depth, pathRelations, relevanceScore}] | ノードから外側へ探索し、減衰と深さに基づいてスコア付けした到達可能な近傍を返します |
ソリューションエンジン(3 個のツール)
| ツール | 入力 | 出力 | 説明 |
|---|---|---|---|
resolve_context | session_id、key | {source, value, score} | 統合コンテキスト検索:短期 KV → 長期グラフ → 見つからない場合 |
promote_to_long_term | session_id、key、value、node_type?、metadata? | {promoted, nodeId} | 短期 KV エントリーを長期メモリーグラフに昇格します |
memory_status | session_id | {shortTerm, longTerm, promotionThreshold} | 短期 KV と長期グラフのメモリー状態を統合して表示します |
インストール
npx 経由(推奨 — インストール不要)
npx pmll-memory-mcp
npm 経由
npm install -g pmll-memory-mcp
pmll-memory-mcp # starts the stdio MCP server
pip 経由(Python)
pip install pmll-memory-mcp
pmll-memory-mcp # starts the stdio MCP server
Claude Desktop / MCP 設定(claude_desktop_config.json)
NPX
{
"tools": [
{
"name": "init",
"description": "Set up PMLL silo and Q-promise state for a session. Call once at task start.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" },
"silo_size": { "type": "integer", "default": 256 }
},
"required": ["session_id"]
}
},
{
"name": "peek",
"description": "Non-destructive cache lookup + Q-promise check. Call before every expensive MCP tool invocation.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" },
"key": { "type": "string" }
},
"required": ["session_id", "key"]
}
},
{
"name": "set",
"description": "Store a key-value pair in the session silo. Call after a cache miss.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" },
"key": { "type": "string" },
"value": { "type": "string" }
},
"required": ["session_id", "key", "value"]
}
},
{
"name": "resolve",
"description": "Check or resolve a Q-promise continuation by promise ID.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" },
"promise_id": { "type": "string" }
},
"required": ["session_id", "promise_id"]
}
},
{
"name": "flush",
"description": "Clear all silo slots for a session. Call at task completion.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" }
},
"required": ["session_id"]
}
},
{
"name": "graphql",
"description": "Execute GraphQL queries or mutations against the memory store.",
"inputSchema": {
"type": "object",
"properties": {
"query": { "type": "string" },
"variables": { "type": "object" },
"operationName": { "type": "string" }
},
"required": ["query"]
}
},
{
"name": "upsert_memory_node",
"description": "Create or update a memory node with auto-generated stable hashing embeddings.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" },
"type": { "type": "string" },
"label": { "type": "string" },
"content": { "type": "string" },
"metadata": { "type": "object" }
},
"required": ["session_id", "type", "label", "content"]
}
},
{
"name": "create_relation",
"description": "Create a typed, weighted edge between two memory nodes.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" },
"source_id": { "type": "string" },
"target_id": { "type": "string" },
"relation": {
"type": "string",
"enum": ["relates_to", "depends_on", "implements", "references", "similar_to", "contains"]
},
"weight": { "type": "number" },
"metadata": { "type": "object" }
},
"required": ["session_id", "source_id", "target_id", "relation"]
}
},
{
"name": "search_memory_graph",
"description": "Semantic search with graph traversal — returns direct matches and neighbor walk.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" },
"query": { "type": "string" },
"max_depth": { "type": "integer" },
"top_k": { "type": "integer" },
"edge_filter": { "type": "string" }
},
"required": ["session_id", "query"]
}
},
{
"name": "prune_stale_links",
"description": "Remove decayed edges (e^(-λt) below threshold) and orphan nodes with low access count.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" },
"threshold": { "type": "number" }
},
"required": ["session_id"]
}
},
{
"name": "add_interlinked_context",
"description": "Bulk-add nodes with auto-similarity linking (cosine >= 0.72 creates edges).",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" },
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": { "type": "string" },
"label": { "type": "string" },
"content": { "type": "string" },
"metadata": { "type": "object" }
},
"required": ["type", "label", "content"]
}
},
"auto_link": { "type": "boolean" }
},
"required": ["session_id", "items"]
}
},
{
"name": "retrieve_with_traversal",
"description": "Walk outward from a node, returning reachable neighbors scored by temporal decay and depth.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" },
"start_node_id": { "type": "string" },
"max_depth": { "type": "integer" },
"edge_filter": { "type": "string" }
},
"required": ["session_id", "start_node_id"]
}
},
{
"name": "resolve_context",
"description": "Unified context lookup: short-term KV -> long-term graph -> miss. Returns source and score.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" },
"key": { "type": "string" }
},
"required": ["session_id", "key"]
}
},
{
"name": "promote_to_long_term",
"description": "Promote a short-term KV entry to the long-term memory graph.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" },
"key": { "type": "string" },
"value": { "type": "string" },
"node_type": { "type": "string" },
"metadata": { "type": "object" }
},
"required": ["session_id", "key", "value"]
}
},
{
"name": "memory_status",
"description": "Unified view of short-term KV and long-term graph memory status for a session.",
"inputSchema": {
"type": "object",
"properties": {
"session_id": { "type": "string" }
},
"required": ["session_id"]
}
}
]
}
Docker
{
"mcpServers": {
"pmll-memory-mcp": {
"command": "docker",
"args": [
"run", "-i",
"-v", "pmll_data:/app/data",
"-e", "MEMORY_FILE_PATH=/app/data/memory.jsonl",
"--rm", "pmll-memory-mcp"
]
}
}
}
VS Code MCP 設定
.vscode/mcp.json に追加します(または、コマンドパレットから MCP: ユーザー設定を開く を選択します)。
NPX
{
"servers": {
"pmll-memory-mcp": {
"command": "npx",
"args": ["-y", "pmll-memory-mcp"]
}
}
}
Docker
{
"servers": {
"pmll-memory-mcp": {
"command": "docker",
"args": [
"run", "-i",
"-v", "pmll_data:/app/data",
"-e", "MEMORY_FILE_PATH=/app/data/memory.jsonl",
"--rm", "pmll-memory-mcp"
]
}
}
}
Docker
# Build from the repository root
docker build -f mcp/Dockerfile -t pmll-memory-mcp .
# Run
docker run --rm -i pmll-memory-mcp:latest
# Run with persistent KV memory via volume
docker run --rm -i \
-v pmll_data:/app/data \
-e MEMORY_FILE_PATH=/app/data/memory.jsonl \
pmll-memory-mcp:latest
コンパニオンサーバーと連携機能
| サーバー/連携機能 | ディレクトリ/ソース | トランスポート | 説明 |
|---|---|---|---|
| Unstoppable Domains | unstoppable-domains/ | HTTP(リモート) | 自然な会話を通じて、Web3 ドメイン名の検索、購入、管理ができます。 |
| Context+ | github.com/ForLoopCodes/contextplus | 統合済み | 長期的なセマンティックメモリーグラフを memory-graph.ts および solution-engine.ts に適合させたものです。[@ForLoopCodes] によるものです。 |
MCP サーバーのドキュメント全文:mcp/README.md
⚓ Stellar コミットメント(pmll-anchor)
メモリー/コードワークのペイロードはオフチェーンに保持されます。オプションの32バイト SHA-256 コミットメントは、Soroban pmll-anchor を介して Stellar メインネット上で稼働中です(drQedwards/pmll と共有)。
ABI に変更はありません。init/store/get/bump のみです。フィールドやコントラクト ID を捏造しないでください。
この PPM ツリーには pmll-anchor/ コントラクトのソース一式が含まれていない場合があります。型付きペイロードは引き続き skill.ts にミラーされています。
呼び出しドキュメント/コントラクトソース:pmll/SKILL.md。ローカルの概要:SKILL.md。
| ネットワーク | コントラクト ID | エクスプローラー |
|---|---|---|
| メインネット | CCF3B64AXLS4OLY5RN4H4K2CFZAYNZCJQY5MKCKCVAKMZNH7G7F7XUUF | stellar.expert |
| テストネット | CDLQR24LLFWXTNGGJVJCRXAF3ZRDWFZRUFTDZ5SJOT2J33CS7DDYP7IU | stellar.expert |
管理者:GBFOFCD3XDANQWSGMHKJJ2V3YXS2QQD7RNC4LMDBVNBTUJOQZ3RLSB3E · wasm ハッシュ 1b6ad9c574e0f5c9e39968f836a410c03adcf057afa93a63d2710bd30fdd53ba
スキルの概要:SKILL.md · 呼び出しドキュメント全文:pmll/SKILL.md
🏛 アーキテクチャ
┌───────────────┐
│ pypm (CLI) │ ← C-based command parser
└───────┬───────┘
│
▼
┌───────────────┐ ┌─────────────┐ ┌──────────────┐
│ Workspace │◀───▶│ Resolver │◀───▶│ Wheel Cache │
│ (TOML / YAML) │ │ (SAT + PEP) │ │ (~/.cache) │
└───────────────┘ └─────┬───────┘ └─────┬────────┘
│ │
▼ ▼
┌──────────┐ ┌────────────┐
│ Env Mgr │ │ Plugin Host│
│ (.venv) │ │ (dlopen) │
└──────────┘ └────────────┘
┌─────────────────────────────────────────────────────┐
│ pmll-memory-mcp v1.0.1 │
│ │
│ ┌──────────── Short-term (5 tools) ──────────┐ │
│ │ index.ts → peekContext() → kv-store.ts │ │
│ │ │ │ │
│ │ └──────► q-promise-bridge │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ ┌──────── Long-term — Context+ (6 tools) ────┐ │
│ │ memory-graph.ts → embeddings.ts │ │
│ │ (nodes, edges, decay, cosine similarity) │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ ┌──────── Solution Engine (3 tools) ─────────┐ │
│ │ solution-engine.ts │ │
│ │ (resolve_context, promote, memory_status) │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
│ │
▼ ▼
PMLL.c / PMLL.h Q_promise_lib/
(memory_silo_t) (qpromise_* / libqpromise.so)
主なコンポーネント
| ファイル/ディレクトリ | 用途 |
|---|---|
Ppm.c | C コア CLI v0.0.3-dev — 単一ファイルに統合されたビルド(約 500 LOC) |
Pypm.c | PyPM 0.3.x のフロントドアディスパッチャー。モジュールのソースに処理を委譲します |
PMLL.c / PMLL.h | 連想/セマンティックサイロ、peek/peek_semantic、SAT ブリッジ、init_pml=-1 |
SAT.c / SAT.h | スタンドアロンのブール SAT ソルバー(first-UIP 学習を用いる CDCL、任意で DRUP 証明に対応。tests/test_sat_c.py でテスト済み)。依存関係の解決にはまだ組み込まれていません(ロードマップに記載)。SAT.py / SAT.pyx:Python と Cython による同じアルゴリズム。docs/SAT_SOLVERS.md を参照してください |
Q_promise_lib/ | Promise/継続ライブラリ(qpromise_*、libqpromise.so。シングルスレッドの drain) |
skill.ts / SKILL.md | オフチェーンの CodeworkPayload と Stellar スキルのエントリ |
pmll-anchor/ | Soroban コミットメントコントラクト(ソースは pmll にあり、ここには存在しない場合があります) |
lattice/ | pmll のみ — プレイ可能な Stellar スキルグラフ/ARC-AGI-3 プレイテスト |
mcp/ | TypeScript 製 PMLL Memory MCP サーバー(15 個のツール) |
mcp/src/memory-graph.ts | Context+ をベースにした長期記憶グラフ |
mcp/src/solution-engine.ts | 短期 KV と長期グラフをつなぐソリューションエンジン |
mcp/src/embeddings.ts | セマンティック検索用の安定したハッシュ埋め込みとコサイン類似度(TF-IDF クラスはレガシーとして保持) |
CLI/ | 拡張 CLI インターフェース |
Panda-lib/ Torch-lib/ Numpy-lib/ | ライブラリ統合シム |
scripts/ | ビルドヘルパーと自動化スクリプト |
📝 リリースノート
マージ後(2026-08)— セマンティックサイロ + Q-promise
- PMLL C コア:連想/セマンティックサイロ(
slots+ 埋め込み)、peek+peek_semantic、SAT ブリッジ。init_pmlの割り当ては-1(未決定)から開始します。 - Q-promise は
qpromise_*+libqpromise.soに進化しました。プロトタイプのQMemNode/q_mem_*API は削除されました。 - Stellar スキル/
skill.tsは、オフチェーンのCodeworkPayloadを既存のpmll-anchorにハッシュするよう調整されています(ABI に変更はありません)。 - MCP サーバーでは
MCPServerを優先し、利用できない場合はFastMCPにフォールバックします。Q-promise の MCP デモではlibqpromise.soを読み込みます。
pypm 0.0.3-dev (25 Jun 2025)
新機能と改善
| 項目 | 新機能 |
|---|---|
| ソースの統合 | v0.0.1 と v0.0.2 を単一の pypm.c ファイルに統合し、ビルドを簡素化しました。 |
| バージョン更新 | CLI が 0.0.3-dev を報告するようになりました。 |
| ワークスペースの上書き | PYP_WORKSPACE_ROOT を尊重しつつ、pypm-workspace.toml の検索も引き続き上位ディレクトリへたどります。 |
| Doctor v2.1 | 問題の数をカウントして、その数を終了コードとして返します。ヒアドキュメント経由でインラインの Python プローブを実行します。 |
| Sandbox v2.1 | -d <DIR> フラグを追加しました。デフォルトは引き続き mkdtemp です。 |
| プラグイン取得機能の強化 | ~/.pypm/plugins を安全に作成します。HTTP 4xx/5xx に対して CURLOPT_FAILONERROR を使用し、プラグインの終了コードを保持します。 |
| Hermetic bundle フラグ | pypylock -o <file> はフラグの順序に関係なく動作します。デフォルトは dist/venv.tar.gz です。 |
| エラー表示の改善 | fatal() が perror で errno を表示するようになりました。dlopen/curl のエラーも呼び出し元に伝わります。 |
修正
- サブコマンドの後にある CLI フラグが
getoptによってときどき読み飛ばされていました → 解析前にoptind = 2を設定するようにしました。 - プラグインローダーは
dlsymが失敗しても成功を返していました → 失敗時は 0 以外を返し、ハンドルを閉じるようになりました。 - ワークスペースのスキャンが、後続の
getcwd()呼び出しで使われるcwdを上書きしなくなりました。
破壊的変更
pypm versionはサブコマンドになりました(--versionフラグではありません)。doctorの終了コードは 1 を超える場合があります(問題数を数値で返します)。
移行(0.0.2 → 0.0.3-dev)
| これまでの操作 | 今後の対応 |
|---|---|
./pypm doctor && echo OK | [[ $? -eq 0 ]] を確認するか、数値のカウントを解析してください。 |
pypm_v002.c/pypm_v001.c を使用していた | pypm.c に切り替え、make clean && make を実行してください。 |
dist/venv.tar.gz のパスをハードコードしていた | 出力先をカスタマイズするには -o フラグを渡してください。 |
既知の問題
- Windows ビルドでは
LoadLibraryW、_mktemp_s、bsdtar.exeのフォールバックが必要です(#22)。 pypylockはシェルのtarに依存しています。libarchiveへの移植は 0.0.4 で予定されています。- WASI/Rust/OpenSSL のチェックは、情報を示すだけのスタブです。
pmll-memory-mcp 1.0.1
- バージョン更新 — PyPI では 1.0.0 がすでに存在していたため、PyPI への公開を修正する目的で 1.0.0 から 1.0.1 に更新しました。
- プロジェクトの説明を更新 — PyPI と npm のパッケージ説明に「in Claude Sonnet/Opus agent tasks」を追加し、mcp/README.md のタグラインに合わせました。
- README を更新 — PPM README.md の MCP セクションに、mcp/README.md の全ツールリファレンス、TypeScript の例を含む
peek()パターン、VS Code の MCP 設定、関連サーバーの表を追加しました。
pmll-memory-mcp 1.0.0
- Context+ との統合 — 長期メモリグラフ用の 6 つのツールを、
Context+ から適合させました。
開発者は @ForLoopCodes です。ツールは
upsert_memory_node、create_relation、search_memory_graph、prune_stale_links、add_interlinked_context、retrieve_with_traversalです。 - ソリューションエンジン — 短期 KV キャッシュと長期メモリグラフをつなぐ、新しい 2 つのツールと 1 つのステータスツールを追加しました。
resolve_context、promote_to_long_term、memory_statusです。 - GraphQL ツール — 柔軟なクエリ/ミューテーションアクセスを可能にする
graphqlツールを追加しました。 - ツールは合計 15 個です(短期 KV が 5 個、GraphQL が 1 個、長期グラフが 6 個、ソリューションエンジンが 3 個)。
- 安定したハッシュ埋め込み(次元固定、語彙共有なし)を使用し、メモリグラフ全体でコサイン類似度検索を行います。
- グラフのエッジに時間減衰スコア(e^(-λt))を適用し、自動的にプルーニングします。
- コンテキストを一括追加する際に、類似度に基づいて自動的にリンクします(コサイン類似度 ≥ 0.72)。
- コンテキスト解決の経路を統一しました:短期 → 長期 → 見つからない。
pmll-memory-mcp 0.2.0
- MCP Registry への初回登録。
- 5 つのツール:
init、peek、set、resolve、flush。 PMLL.c::memory_silo_tを反映した TypeScript KV ストア。- Q-promise レジストリ(旧仕様)。現在の C API は
qpromise_*/libqpromise.soです。 - 永続ボリュームに対応した Docker マルチステージイメージ。
- 同梱の Unstoppable Domains MCP サーバーは
mcp/unstoppable-domains/にあります。
pypm 0.0.2 (25 Jun 2025)
ワークスペースの自動検出、Doctor v2、Sandbox のアップグレード、Plugin の追加/実行、pypylock -o。
破壊的変更:--version フラグを削除しました。問題がある場合、doctor はゼロ以外の終了コードを返します。
pypm 0.0.1 (23 Jun 2025)
初期の概念実証 — doctor、sandbox、plugin、pypylock を備えた単一ファイルの CLI。
🗺 ロードマップ
| Version | Planned features |
|---|---|
| 0.0.4 | 実用的な完全密閉バンドル向けのロックファイルパーサー+wheel コピー機能 |
| 0.0.5 | libsolv ベースの依存関係リゾルバー |
| 0.1.0 | クロスプラットフォームシム(Windows / macOS) |
| 0.1.1 | WASI ツールチェーンの検出と wheel の優先設定 |
| future | SAT 依存関係ソルバー、並列 wheel キャッシュ、ワークスペース、WASM 解決 |
🤝 貢献とスポンサー
プルリクエストを歓迎します。Issue や PR は
https://github.com/drQedwards/PPM/issues にお寄せください。
PPM または pmll-memory-mcp が役立った場合は、開発へのご支援をご検討ください。
- Dr. Q Josef Kurk Edwards が開発 — 共有 PMLL メモリースタックを活用し、Python パッケージングを高速かつ決定的で、自由に改変できるものにします。*
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。