mcpField
M
Memory MCP Server

Memory MCP Server

ローカル
github.comメモリ・ナレッジ035 週間前に更新

Memory MCP Server について

Memory MCP Serverは、MCP対応アシスタント向けのSQLiteベースの永続メモリです。ローカルのstdioサーバーで全文検索、関係グラフの探索、トークン予算に応じた取得を組み合わせます。

主な機能

  1. 01SQLiteへのメモリ永続化
  2. 02FTS5による内容とタグの検索
  3. 03BFSによるメモリ関係の探索
  4. 04トークン予算内でのコンテキスト取得
  5. 05メモリと関係の一括管理

活用シーン

  1. 01アシスタントのセッション間で情報を保持
  2. 02テキスト、種類、重要度からメモリを検索
  3. 03関係グラフをたどって関連メモリを想起
  4. 04トークン上限に収まるメモリコンテキストを選択

MCP 対応

stdio経由でメモリのCRUD、一括操作、検索、グラフ想起、コンテキスト取得、関係管理、統計のツールを提供します。使い方リソースとメモリURIテンプレートも備えています。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"j0hanz-memory": {
"command": "npx",
"args": [
"-y",
"@j0hanz/memory-mcp"
]
}
}
}
起動コマンドnpx -y @j0hanz/memory-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@j0hanz/memory-mcp1.7.0

ツール

13

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
tagsarrayはいメモリタグ
contentstringはいメモリーの内容
importanceintegerいいえ優先度(0-10)
memory_typeenumいいえメモリのカテゴリgeneral | fact | plan | decision | reflection | lesson | error | gradient

詳細

Memory MCP

npm version License: MIT Node.js TypeScript

Install in VS Code Install in VS Code Insiders

Install in Cursor

永続メモリストレージ、全文検索、関係グラフのトラバーサルに対応した、SQLite ベースの MCP サーバーです。

概要

Memory MCP は、MCP 対応アシスタント向けにローカルで永続的なメモリレイヤーを提供します。SHA-256 アドレス指定のメモリアイテムを SQLite に保存し、FTS5 による全文検索、有向関係グラフ、BFS による想起トラバーサル、トークン予算を考慮したコンテキスト取得を備えています。これらすべてを外部依存関係なしで、stdio トランスポート経由で利用できます。

主な機能

  • CRUD、一括操作、FTS5 検索、BFS グラフ想起、トークン予算に応じたコンテキスト取得、関係、統計情報のための 13 個の MCP ツール。
  • SQLite FTS5 を使用した、重要度とタイプによるフィルターに対応したコンテンツおよびタグの 全文検索。
  • BFS トラバーサル、範囲を制限したフロンティア、ホップごとの MCP 進捗通知に対応した グラフ想起。
  • トークン予算に応じた取得(retrieve_context)では、呼び出し元が指定したトークン予算に収まるメモリを選択します。手動でページネーションする必要はありません。
  • 型付き出力エンベロープと SHA-256 ハッシュアドレス指定に対応した 厳密な Zod 入力検証。
  • internal://instructions(Markdown ガイド)と、ハッシュの自動補完に対応した URI テンプレート memory://memories/{hash} を備えた リソースサポート。
  • SIGINT、SIGTERM による正常なシャットダウン処理に対応した stdio トランスポート。HTTP エンドポイントはありません。 |

要件

  • Node.js >=24。
  • FTS5 をサポートする SQLite(起動時に検証されます)。
  • stdio コマンドサーバーに対応した任意の MCP クライアント。

クイックスタート

インストール不要で、npm パッケージを npx から直接使用できます。

{
  "mcpServers": {
    "memory-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/memory-mcp@latest"]
    }
  }
}

ヒント

サーバーは stdio トランスポートのみを使用し、HTTP エンドポイントは公開しません。カスタムログ出力によって stdout を汚さないでください。

または、Docker で実行します。

docker run --rm -i ghcr.io/j0hanz/memory-mcp:latest

クライアント設定

VS Code にインストール

VS Code にインストール

ワークスペースファイル .vscode/mcp.json:

{
  "servers": {
    "memory-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/memory-mcp@latest"]
    }
  }
}

CLI:

code --add-mcp '{"name":"memory-mcp","command":"npx","args":["-y","@j0hanz/memory-mcp@latest"]}'
VS Code Insiders にインストール

VS Code Insiders にインストール

CLI:

code-insiders --add-mcp '{"name":"memory-mcp","command":"npx","args":["-y","@j0hanz/memory-mcp@latest"]}'
Cursor にインストール

Cursor にインストール

~/.cursor/mcp.json:

{
  "mcpServers": {
    "memory-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/memory-mcp@latest"]
    }
  }
}
Claude Desktop / Claude Code にインストール

claude_desktop_config.json:

{
  "mcpServers": {
    "memory-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/memory-mcp@latest"]
    }
  }
}

CLI:

claude mcp add memory-mcp -- npx -y @j0hanz/memory-mcp@latest
Windsurf にインストール

MCP 設定:

{
  "mcpServers": {
    "memory-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/memory-mcp@latest"]
    }
  }
}
Docker で実行
# Pull and run (stdio mode)
docker run --rm -i \
  -e MEMORY_DB_PATH=/data/memory.db \
  -v memory-data:/data \
  ghcr.io/j0hanz/memory-mcp:latest

MCP クライアント設定:

{
  "mcpServers": {
    "memory-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "MEMORY_DB_PATH=/data/memory.db",
        "-v",
        "memory-data:/data",
        "ghcr.io/j0hanz/memory-mcp:latest"
      ]
    }
  }
}

ドキュメントの保守

  • 担当者:src/ の MCP の動作を更新するメンテナーは、同じ PR で README.md と該当する mcp/ のミラーページを更新する必要があります。
  • リンク/バージョンポリシー:プロトコルの参照には固定された https://modelcontextprotocol.io/specification/2025-11-25/... リンクを使用し、latest や混在するレガシーなリンク先は避けてください。
  • 差分確認チェックリスト:
    • src/server.ts の機能宣言を再確認します。
    • ツール/リソース/プロンプトのドキュメントを src/tools/index.ts、src/resources/index.ts、src/prompts/index.ts と照合します。
    • src/instructions.md の制限事項や注意点が実行時の動作と一致していることを確認します。
  • 検証コマンド:npm run type-check、npm run test:fast、npm run build。

MCP のインターフェース

ツールの概要
ツールカテゴリ備考
store_memory書き込み内容とソート済みタグのハッシュで冪等性を確保
store_memories書き込みバッチ(1~50 件)、トランザクションでラップ
get_memory読み取りハッシュ検索
update_memory書き込みold_hash + new_hash を返す
delete_memory書き込み関連データの削除を連鎖して実行
delete_memories書き込みバッチ(1~50 件)、トランザクションでラップ
search_memories読み取りFTS5 + 重要度/タイプのフィルター + カーソル
create_relationship書き込み冪等な有向エッジの作成
delete_relationship書き込み指定された有向エッジを削除
get_relationships読み取り方向フィルター + 関連するメモリのフィールド
recall読み取りFTS5 のシード + BFS トラバーサル(深度 0~3)
retrieve_context読み取りトークン予算を考慮したコンテキストの取得
memory_stats読み取りストアの集計情報とタイプ別内訳

store_memory

内容、タグ、オプションの種類/重要度を指定して、新しいメモリを保存します。冪等です。同じ内容とタグを保存すると、created: false と既存のハッシュが返されます。

NameTypeRequiredDefaultDescription
contentstringYes—メモリの内容(1~100000 文字)
tagsstring[]Yes—1~100 個のタグ。各タグは最大 50 文字で、空白は使用できません
memory_typeenumNogeneralgeneral、fact、plan、decision、reflection、lesson、error、gradient
importanceintegerNo0優先度(0~10)

戻り値:{ hash, created }


store_memories

1 回のトランザクションで複数のメモリを保存します(最大 50 件)。

NameTypeRequiredDescription
itemsArray<StoreMemoryItem>Yes1~50 件のアイテム。それぞれに content、tags、およびオプションの memory_type と importance を指定します

戻り値:{ items, succeeded, failed }


get_memory

SHA-256 ハッシュを指定して、1 件のメモリを取得します。

NameTypeRequiredDescription
hashstringYes64 文字の小文字の SHA-256 16 進数

戻り値:Memory、または E_NOT_FOUND の場合は { ok: false, error }。


update_memory

既存のメモリの内容を更新し、必要に応じてタグも更新します。両方のハッシュが返されます。

NameTypeRequiredDefaultDescription
hashstringYes—既存のメモリのハッシュ
contentstringYes—置き換える内容
tagsstring[]NoExisting tags置き換えるタグ

戻り値:{ old_hash, new_hash }


delete_memory

ハッシュを指定して、1 件のメモリを削除します。関連するリレーションシップの行も連鎖的に削除されます。

NameTypeRequiredDescription
hashstringYesメモリのハッシュ

戻り値:{ hash, deleted }


delete_memories

1 回のトランザクションで、ハッシュを指定して複数のメモリを削除します。

NameTypeRequiredDescription
hashesstring[]Yes1~50 個のメモリのハッシュ

戻り値:{ items, succeeded, failed }


search_memories

FTS5 を使用して、メモリーの内容とタグを全文検索します。重要度とタイプによるフィルターに対応し、カーソルを使ってページネーションします。

NameTypeRequiredDefaultDescription
querystringYes—検索テキスト(1~1000 文字)
limitintegerNo201 ページあたりの結果数(1~100)
cursorstringNo—前回のレスポンスから取得したページネーション用カーソル
min_importanceintegerNo—重要度がこの値以上(0~10)のメモリーのみを返します
max_importanceintegerNo—重要度がこの値以下(0~10)のメモリーのみを返します
memory_typeenumNo—メモリータイプで絞り込み

返り値:{ memories, total_returned, nextCursor? }


create_relationship

2 つのメモリー間に、有向のリレーションシップエッジを作成します。べき等です。

relation_type の値として、related_to、causes、depends_on、parent_of、child_of、supersedes、contradicts、supports、references を推奨します。

NameTypeRequiredDescription
from_hashstringYesソースメモリーのハッシュ
to_hashstringYesターゲットメモリーのハッシュ
relation_typestringYesエッジのラベル(1~50 文字、空白なし、自由形式)

返り値:{ created }


delete_relationship

有向のリレーションシップエッジを 1 つ削除します。

NameTypeRequiredDescription
from_hashstringYesソースハッシュ
to_hashstringYesターゲットハッシュ
relation_typestringYesリレーションシップタイプ

返り値:E_NOT_FOUND の場合は { deleted } または { ok: false, error }。


get_relationships

メモリーのリレーションシップを取得します。方向によるフィルターを任意で指定できます。

NameTypeRequiredDefaultDescription
hashstringYes—メモリーのハッシュ
directionenumNobothoutgoing、incoming、または both

返り値:{ relationships, count }

各リレーションシップには、from_hash、to_hash、relation_type、created_at、linked_hash、linked_content、linked_tags が含まれます。


recall

全文検索クエリでメモリを検索し、その後 BFS で最大 depth ホップまで関係グラフをたどります。各ホップで MCP の進捗通知を送信します。

名前型必須デフォルト説明
querystringはい—シード検索クエリ(1~1000 文字)
depthintegerいいえ1BFS のホップ数(0~3)
limitintegerいいえ10シードメモリ数(1~50)
cursorstringいいえ—前回の応答から取得したページネーションカーソル
min_importanceintegerいいえ—シードのフィルター:重要度が指定値以上のメモリのみ(0~10)
max_importanceintegerいいえ—シードのフィルター:重要度が指定値以下のメモリのみ(0~10)
memory_typeenumいいえ—シードのフィルター:このタイプのメモリのみ

戻り値:{ memories, graph, depth_reached, aborted?, nextCursor? }

graph 内の各項目は次の形式です。

{ "from_hash": "...", "to_hash": "...", "relation_type": "..." }

メモ

aborted: true は、走査が安全上の上限(RECALL_MAX_FRONTIER_SIZE、RECALL_MAX_EDGE_ROWS、または RECALL_MAX_VISITED_NODES)に達したことを示します。部分的な結果は引き続き返されます。


retrieve_context

メモリを検索し、呼び出し元が指定したトークン予算内に収まる関連度順の結果を返します。コンテキストウィンドウの管理における、手動のページネーションとトークン数のカウントが不要になります。

名前型必須デフォルト説明
querystringはい—検索クエリ(1~1000 文字)
token_budgetintegerいいえ4000返す推定トークン数の上限(100~200000)
strategyenumいいえrelevance並べ替え順:relevance(FTS ランク)、importance(重要度の高い順)、recency(新しい順)

戻り値:{ memories, estimated_tokens, truncated }

ヒント

トークン数の推定は概算です(コンテンツの長さ ÷ 4)。truncated: true は、すべての候補を含める前に予算に達したことを示します。


memory_stats

メモリと関係の集計統計を返します。入力は不要です。

戻り値:

{
  "memories": {
    "total": 0,
    "oldest": null,
    "newest": null,
    "avg_importance": null
  },
  "relationships": { "total": 0 },
  "by_type": {}
}

リソース
URIMIME説明
internal://instructionstext/markdownすべてのツールとワークフローの Markdown 使用ガイド
memory://memories/{hash}application/json1 件のメモリを JSON で返します。ハッシュ補完に対応しています
プロンプト
名前引数目的
get-helpなしすべてのツールの使用方法をまとめて返します

設定

環境変数
変数説明デフォルト必須
MEMORY_DB_PATHSQLite データベースファイルのパスmemory_db/memory.dbいいえ
RECALL_MAX_FRONTIER_SIZEホップごとの BFS フロンティアノードの最大数(100–50000)1000いいえ
RECALL_MAX_EDGE_ROWSトラバーサルごとに取得する関係行の最大数(100–50000)5000いいえ
RECALL_MAX_VISITED_NODESトラバーサル全体で訪問済みとなるノードの最大数(100–50000)5000いいえ

重要

MEMORY_DB_PATH が相対パスの場合(デフォルトの memory_db/memory.db を含む)、プロセスの作業ディレクトリを基準に解決されます。

ヒント

データベースをバージョン管理の対象外にするには、.gitignore に memory_db/ を追加してください。データベースにはローカルのセッションデータが含まれるため、共有したりコミットしたりしないでください。

制限事項と制約
項目値
コンテンツの長さ1~100000 文字
タグ数メモリごとに 1~100 個
タグの長さ1~50 文字、空白なし
ハッシュ形式64 文字の小文字 16 進数 SHA-256
検索クエリの長さ1~1000 文字
search_memories.limit1~100(デフォルト 20)
recall.depth0~3(デフォルト 1)
recall.limit1~50(デフォルト 10)
retrieve_context.token_budget100~200000(デフォルト 4000)
バッチサイズ1~50 件(store_memories、delete_memories)
リコールのフロンティア上限RECALL_MAX_FRONTIER_SIZE(ホップごとのデフォルトは 1000)
SQLite のビジータイムアウト5000 ms

メモ

カーソル値は不透明な base64url エンコード済みトークンです。不透明な値として扱い、解析しないでください。

セキュリティ

  • トランスポートは stdio のみ(StdioServerTransport)で、HTTP エンドポイントはありません。
  • 致命的なプロセスエラーは stderr に出力されます。MCP プロトコルのため、stdout はクリーンな状態に保つ必要があります。
  • データベースにアクセスする前に、すべての入力を厳格な Zod スキーマと上限付きフィールド制約で検証します。
  • ハッシュは、小文字 64 文字の SHA-256 16 進数正規表現に照らして検証します。
  • FTS の MATCH 実行前に検索入力を英数字の語句にトークン化します(英数字以外の文字は区切り文字として扱われ、FTS インジェクションを防ぎます)。
  • SQLite の外部キーが有効になっており、メモリを削除すると関連行も連鎖削除されます。

開発

依存関係をインストールします:

npm install

主要なスクリプト:

スクリプトコマンド用途
buildnpm run buildクリーンアップ、コンパイル、インストラクションの検証、アセットのコピー、実行権限の付与
devnpm run devTypeScript のウォッチモード
dev:runnpm run dev:run.env とファイル監視を使用してビルド済みサーバーを実行
startnpm run startビルド済みサーバーを起動
testnpm run testタスクランナーによるフルビルドとテスト
test:fastnpm run test:fastNode のテストランナーで TS テストを直接実行
lintnpm run lintESLint チェック
lint:fixnpm run lint:fixESLint による自動修正
type-checknpm run type-check厳密な TypeScript チェック
formatnpm run formatPrettier によるフォーマット
inspectornpm run inspectorstdio サーバーに対してビルドし、MCP Inspector を開く

MCP Inspector で確認します:

npx @modelcontextprotocol/inspector node dist/index.js

ビルドとリリース

GitHub Actions のリリースワークフロー(.github/workflows/release.yml)は、単一の workflow_dispatch トリガーでバージョン管理、検証、公開を処理します:

workflow_dispatch (patch / minor / major / custom)
    │
    ▼
  release — bump package.json + server.json → lint → type-check → test → build → tag → GitHub Release
    │
    ├──► publish-npm ──► publish-mcp   (npm Trusted Publishing OIDC → MCP Registry)
    │
    └──► publish-docker                (GHCR, linux/amd64 + linux/arm64)

リリースを実行します:

gh workflow run release.yml -f bump=patch

または、GitHub UI を使用します:Actions → Release → Run workflow。

メモ

npm の公開には OIDC Trusted Publishing を使用するため、NPM_TOKEN シークレットは不要です。MCP Registry では GitHub OIDC を使用します。Docker では組み込みの GITHUB_TOKEN を使用します。

トラブルシューティング

症状原因対処法
FTS5 エラーで起動に失敗するFTS5 なしでビルドされた Node.jsSQLite FTS5 をサポートする Node.js 24+ を使用する
get_memory で E_NOT_FOUNDハッシュが存在しないまず search_memories で確認する
E_INVALID_CURSOR古い、または形式が不正なカーソルcursor パラメーターを指定せずにリクエストを再試行する
MCP クライアントが接続できないカスタム stdout ログが追加されたサーバープロセスが stdout に何も書き込まないようにする
recall で aborted: trueトラバーサルが安全制限に達したdepth を減らすか、RECALL_MAX_* 環境変数を調整する
データベースのロックエラー書き込みの同時実行負荷が高いSQLite のビジータイムアウトは 5000 ms です。同時書き込みを減らしてください

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。