Skip to main content
Glama
thammarongg

blueocean-vector

BlueOcean Vector

共有・永続的なメモリを提供するコーディングエージェント向けツール。

License Python MCP Docker Compose Status

Claude CodeからCodex、Cursorへとプロジェクトの途中で切り替えても、あるいはそのうちの一つのツールでトークンを使い果たしても、メモリは生き続けます。

コンテキストウィンドウを使い切り、別のツールを開き、自分が何をしていたかを再度説明するために10分を費やした経験があるなら、このツールはその問題を解決します。BlueOcean Vectorは、あなたのマシン上で1つの小さなサーバーを実行します。MCPに対応したエージェントなら誰でも、そのサーバーに対して読み書きできます。次に開くツールは「このプロジェクトについて何を知っている?」と尋ね、前回の続きから作業を再開します。

[!TIP] Claude Codeで決定を保存 → 翌日Codexを開く → すでに「なぜPostgresをDynamoDBではなく選んだのか」、その理由だけでなく、そう決めた経緯も理解している。


目次


Related MCP server: AIVectorMemory

なぜ存在するのか

どのエージェントセッションもゼロから始まります。プロジェクト、制約、「それはもう試したがうまくいかなかった」という事実を説明し、そしてセッションが終了するとすべてが消えます。使用するツールごとにそれが繰り返され、1時間前にすでに存在していたコンテキストを再構築するためだけに、実際のトークンを浪費していることになります。

BlueOcean Vectorは、小さくて地味な修正策です。1つの共有メモリストア、1つのURL、そしてどのMCPクライアントでも呼び出せる共通のツールセット(memory_store、memory_search、memory_summarize_sessionなど)を提供します。何を記憶するべきかを賢く判断しようとはしません。単にエージェントが情報を置き、後で取り出せる場所を提供するだけです。プロジェクトごとにスコープが設定されているため、あるコードベースの検索が別のコードベースのノイズを拾い上げることはありません。


比較

「AIエージェント向けメモリ」プロジェクトの分野はすでに豊富です。このプロジェクトが実際にどの位置にあるのかを正直に示す価値があります。

プロジェクト

エージェントが通信する方法

記憶内容を決定する主体

セマンティックベクトル検索

mem0

SDK / ホスト型API

自動 — LLMが取り込み時にファクトを抽出する

あり、抽出レイヤーの背後でラップされる

Zep / Graphiti

SDK、または公式MCPサーバー

自動 — エンティティ/関係がナレッジグラフに抽出される

グラフ探索に次ぐ

Letta (旧称MemGPT)

完全なステートフルエージェントプラットフォーム、サーバー+SDK

半自動 — エージェント自身のLLMがメモリをページングする

あり、アーカイブメモリ向け

Memorix

MCPネイティブ、サーバー不要

明示的 — 呼び出し元のエージェントが書き込む

フォールバックのみ(約1.8秒)、キーワード検索が主力

threadctx-mcp

MCPネイティブ

明示的 + オプションのパッシブgitキャプチャ

有料クラウド層 — ローカルモードはキーワードのみ

BlueOcean Vector

MCPネイティブ、1つの共有サーバー

明示的 — 呼び出し元のエージェントが書き込む

主要かつ常時利用可能

2つの正直な結論:

  • 「MCPネイティブで、どのクライアントでも動作する」というニッチは空いていない — Memorixがすでにそこに存在し、より多くの組み込みツールを備えています。ここでの違いは、ベクトル検索がフォールバックや有料層の背後に隠れるのではなく、主要な検索経路であること、デフォルトの埋め込みモデルが真に多言語対応(タイ語+英語でテスト済み)であること、そして1つの共有・永続的なサーバーとして動作するように設計されていることです。ベアラートークン認証、ECSへのドキュメント化されたパス、Kubernetes対応のヘルスプローブ、そして共有サーバーが実際に直面する同時実行性の問題に対する真の修正が含まれています。

  • 自動抽出や統合は行わない — mem0、Graphiti、Letta、cognee、LangMemとは異なり、会話を読み取って何を記憶する価値があるかを判断する機能はありません。これは意図的なシンプルさのトレードオフであり、欠落している機能ではありません。エージェントは明示的にmemory_storeを呼び出す必要があります。もしあなたの代わりに何を保持すべきかを判断するシステムが必要なら、上記のプロジェクトの方が適しています。

メモリが100万行を保持しようとすべきではない

あるプロジェクトは100万行のコードです。そして、BlueOcean Vectorを含め、どのメモリシステムもそのすべてを保存しようとすべきではありません。コードを保存するのはコード検索ツールの仕事であり、メモリサーバーの仕事ではありません。

BlueOceanの役割はもっと狭く、より有用です。重要なことと、それがどこにあるかを記憶すること。 決定事項、アーキテクチャ、「試したがうまくいかなかった」という情報 — エージェントが100万行から再発見しなければならない凝縮された知識 — そして、詳細が必要なときにエージェントを実際のコードに戻すための十分なコンテキストを保持します。

その結果、メモリはコードベースのサイズではなく、実際に記憶する価値があるものに応じて増加します。100万行のプロジェクトでも、数千のメモリエントリで済みます。そのため、プロジェクトがどれだけ大きくても、検索は低コストに保たれます。

トークンの計算

メモリを読み戻す際に、その違いが顕著になります。最も安価な代替手段 — プロジェクトメモをエージェントが読み戻す.rememberファイルにダンプするスキルやプラグイン — は、ファイルがコンテキストウィンドウを超えるまではうまく機能しますが、それを超えると静かに役に立たなくなります。

BlueOceanは、すべての検索にトークンバジェット(デフォルト2000トークン、BLUEOCEAN_MAX_TOKENSで設定可能)を設定します。セマンティック検索は関連するエントリのみを引き出し、バジェットを分割します:約60%を凝縮された要約に、約40%をトップヒットの完全な内容に割り当てます。バジェットを超えるエントリは切り詰められ、丸ごとダンプされることはありません。

手法

取得あたりのコスト

メモリサイズに応じて増加するか?

BlueOcean Vector (memory_search)

キャップ付き、トークンバジェット(デフォルト2000)

いいえ — コレクションサイズに関係なく境界あり

.rememberファイル(ファイル全体を読む)

ファイル全体のサイズに等しい

はい — 線形に増加し、最終的にコンテキストウィンドウを超える

.rememberファイル(エージェントが1セクションを読む)

そのセクションのサイズに等しい

部分的 — しかしエージェントは関連性のランク付けなしにどのセクションかを推測しなければならない

実際の小規模デモプロジェクトに対する検索では、1つの要約と1つの完全なエントリに対して121トークンが返されました。これは2000トークンのバジェットの数パーセントに過ぎず、そのバジェットはプロジェクトがメモリを蓄積しても決して増加しません。プレーンファイルの場合、同じ読み取りには毎回ファイル全体のコストがかかるため、5,000エントリのプロジェクト(数十万トークン)は一度に読み取れません。


全体の構成

┌────────────┐ ┌──────┐ ┌────────┐ ┌───────────────┐ ┌──────┐
│Claude Code │ │Cursor│ │ Codex  │ │Gemini/Antigrav│ │ Kiro │  ...any MCP-http tool
└─────┬──────┘ └──┬───┘ └───┬────┘ └───────┬───────┘ └──┬───┘
      └───────────┴─────────┴──────────────┴────────────┘
                            │  http://localhost:8765/mcp
                 ┌───────────────────────────┐
                 │  blueocean-mcp             │   Python MCP server
                 │  (one shared, persistent   │   (docker compose)
                 │  server, not per-agent)    │
                 └─────────────┬─────────────┘
                               │
                 ┌───────────────────────────┐
                 │  Qdrant (vector DB)        │   Docker locally → ECS Fargate in the cloud
                 └───────────────────────────┘

知っておく価値のあるいくつかの設計上の選択:

選択肢

理由

1つのサーバー、URLでアクセス

主要なMCPクライアント(および多数のニッチなもの)はすべて、独自の「リモートサーバーを追加」コマンドを持っています。それらすべてを同じURLに向ければ、私たちが特別な設定ファイルを編集する必要はありません。

Qdrantを基礎に、プロジェクトごとに1つのコレクション

project-aのメモリがproject-bの検索に漏れることはありません。

デフォルトで多言語対応

埋め込みモデルはintfloat/multilingual-e5-largeなので、タイ語と英語(またはカバーする他の言語ペア)が混在したプロジェクトノートでも、追加設定なしで両方の言語にわたって検索できます。

トークンバジェットによる読み取り

memory_searchは最初に短い要約を返し、設定したバジェットに達するまでトップマッチの完全な内容に展開します。エージェントは、メモリストアが大きく成長しても、低コストで実行し続けられます。

stdioトランスポートも利用可能で、各ツールが共有サーバーと通信する代わりに、独自のローカルプロセスを起動することもできます。詳細は下記の代替方法:stdioを参照してください。共有HTTPサーバーが推奨される方法です。stdioはエージェントごとに別々の埋め込みモデルのコピーを起動します。


はじめに

# 1. Bring up Qdrant + the MCP server (both run in the background via docker compose)
./scripts/setup_local.sh

# 2. Register the URL with whichever agents you use
./scripts/register_mcp.sh

以上です。setup_local.shは両方のコンテナを起動し、Qdrantが実際に応答するまで待機し(「プロセスが起動した」だけではありません)、初回実行時に.env.exampleを.envにコピーし、Pythonパッケージを同期します。次にregister_mcp.shが各ツールの独自のmcp addCLIを呼び出すか(Cursorの場合は、CursorのCLIはアプリが開いている間しか動作しないため、~/.cursor/mcp.jsonを直接編集します)、http://localhost:8765/mcpを指すように設定します。

その他のMCP-http対応ツール(私たちが聞いたことのないものも含む)については、そのツールの「リモートMCPサーバーを追加」機能を使って同じURLを指定してください:

http://localhost:8765/mcp

エージェントに実際に使わせるには

サーバーを登録するとツールが利用可能になりますが、エージェントが自らそれを使うわけではありません。scripts/install_skill.shは、小さなスキルをインストールします — 「セッション開始時にメモリを確認し、コンテキストが不足する前に書き込む」 — これを使用するエージェントにインストールすることで、毎回プロンプトで指示しなくても習慣が身につきます:

./scripts/install_skill.sh          # interactive picker
./scripts/install_skill.sh all      # install into every supported tool found
./scripts/install_skill.sh --list   # see what's installed where

これは1つの正規のSKILL.mdであり、各ツールのスキルディレクトリにシンボリックリンクされます。一度編集すれば、すべてのツールに変更が反映されます。

代替方法:stdio(エージェントごとのローカルプロセス)

Dockerが利用できない、または共有サーバーを実行したくない場合は、次のコマンドを実行します:

uv run blueocean-mcp --transport stdio --qdrant-url http://localhost:6333

そして、ツールのMCP設定でurlの代わりにcommand(.venv/bin/blueocean-mcpを参照)を指定します。


エージェントが利用できるツール

ツール

機能

memory_store

エントリ(内容、要約、重要度スコア、エリア/モジュールタグ)を保存する

memory_search

セマンティック検索、トークン予算内で:まず安価な要約、収まる範囲で全文を表示

memory_get

IDでエントリの全文を取得する

memory_delete

IDでエントリを削除する

memory_list_projects

メモリコレクションを持つすべてのプロジェクトを一覧表示する

memory_manifest

検索前に存在するエリア/モジュールを確認し、クエリの範囲を適切に設定する

memory_summarize_session

次にこのセッションを引き継ぐエージェント向けに、簡潔な引き継ぎメモを残す

memory_stats

カウントと分布、主に管理/デバッグ用

合理的なエージェントのワークフロー:セッション開始時に memory_manifest を呼び出し、次に memory_search でコンテキストを安価に読み込む。作業中に実際の判断を memory_store に保存する(重要度5:「XよりYを選んだ理由」、重要度3:定常的なステータス)。ツールを切り替える前や予算が少なくなったら memory_summarize_session を呼び出す。


設定

すべて .env に記述します(.env.example をコピーして開始)。デフォルトはローカル、単一マシンでの使用に適しています。主な調整項目は以下の通りです:

  • BLUEOCEAN_EMBEDDING — fastembed(デフォルト、ローカルで無料)、openai、または bedrock。BLUEOCEAN_EMBED_MODEL も固定してください。あるモデルで書き込まれたベクトルは別のモデルでは意味のある検索ができないため、ローカルとクラウドでモデルを一致させる必要があります。

  • BLUEOCEAN_QDRANT_URL — Qdrant の場所。

  • BLUEOCEAN_MAX_TOKENS / BLUEOCEAN_TOP_K — デフォルトの検索予算。

  • BLUEOCEAN_AUTH_TOKEN — デフォルトでは未設定(127.0.0.1 のみの使用では問題ありません)。このサーバーを自分のマシン以外に公開する場合は、セキュリティ を参照してください。

トランスポート(streamable-http と stdio)は環境変数ではなく CLI フラグです。これは「どう実行するか」という起動時の選択であり、永続的な設定ではありません。


管理 CLI

uv run blueocean-admin stats <project>
uv run blueocean-admin manifest <project>
uv run blueocean-admin list
uv run blueocean-admin export <project>
uv run blueocean-admin prune <project> --older-days 90 --max-importance 2 [--dry-run]
uv run blueocean-admin snapshot <project> [--out ./backups]
uv run blueocean-admin restore <project> <snapshot-file> --yes
uv run blueocean-admin generate-token --write-env

[!WARNING] 複数のエージェントセッションが同じプロジェクトを共有している場合、prune はそれを認識しません。フィルタに一致するエントリを、別のセッションが5分前に書き込んだものでも削除します。最初に --dry-run を実行し、広範なリセットよりも狭いフィルタを優先してください。

export はペイロードのみを JSON としてダンプします(with_vectors=False)。そこから復元するにはすべてを最初から再埋め込みする必要があり、真のポイントインタイムリストアではありません。snapshot/restore は代わりに Qdrant のネイティブスナップショットメカニズムを使用します。ベクトル、ペイロード、インデックス状態をアトミックにキャプチャします。snapshot はファイルをローカルディスクにダウンロードし、ダウンロードが完全であることが確認されたらサーバー側のコピーを削除します(バックアップ元の Qdrant ボリューム内にのみバックアップが存在するのはバックアップとは言えません)。restore はプロジェクトの現在のデータを上書きするため、--yes が必要です。

プロジェクト名は厳密に検証されます(^[a-z0-9][a-z0-9_-]*$、このプロジェクトが推奨するディレクトリ名の規則に一致)。警告なしに正規化されることはありません。2つのエージェントが同じプロジェクトの綴りをわずかに異なる形で推測した場合("Team A" と "team-a")、以前は警告なしに1つのコレクションにマージされていましたが、現在は不一致のものが拒否されます。


テストの実行

tests/ 以下のテストファイルはスタンドアロンスクリプトです(if __name__ == "__main__":)。pytest で検出されるファイルではありません。モジュールとして実行してください:

uv run python -m tests.smoke
uv run python -m tests.auth
uv run python -m tests.mcp_e2e
uv run python -m tests.backup   # real snapshot -> delete collection -> restore cycle
uv run python -m tests.health   # /health diagnostics + the cloud-provider self-test TTL cache

tests/auth.py は特に、認証なしおよび間違ったトークンのリクエストが拒否されること(401)、正しいトークンがヘッダーと ?token= クエリパラメータの両方で機能することを確認します。


セキュリティ

デフォルトでは認証なし。127.0.0.1 のみのローカル使用では問題ありませんが、他の場所から到達可能になった瞬間に問題になります。

[!IMPORTANT] このサーバーを localhost 以外(共有マシン、クラウド)に公開する場合は、他のことをする前に BLUEOCEAN_AUTH_TOKEN を設定してください。

uv run blueocean-admin generate-token --write-env
docker compose up -d --force-recreate blueocean-mcp
./scripts/register_mcp.sh   # reads the token from .env, re-sends it to every tool

すべてのツールがリモートサーバーを URL で登録する際にカスタムヘッダーを設定できるわけではないため、サーバーは2つの方法でトークンを受け入れ、各クライアントはサポートする方を使用します:

  • Authorization: Bearer <token> — Claude Code、Gemini/Antigravity

  • URL に ?token=<token> — Codex、Kiro、Cursor

stdio トランスポートはこれを完全にスキップします。ローカルで生成されたサブプロセスであり、ネットワーク上に存在するのではなく、OS のプロセス生成権限によってすでにゲートされています。

GET /health は意図的に認証なしで、Qdrant が実際に到達可能かどうかを確認します(プロセスが生きているかどうかだけではありません)。docker-compose.yml のヘルスチェックがポーリングするものです。また、アクティブな埋め込みプロバイダー/モデルを報告し、openai/bedrock(fastembed ではありません。fastembed のモデルロードはプロセス起動時にすでにゲートされています)の場合は、課金される埋め込みエンドポイントではなく、無料のコントロールプレーン呼び出しで資格情報を検証し、結果を BLUEOCEAN_HEALTH_EMBED_TTL 秒(デフォルト60)キャッシュします。これにより、10秒間隔のプローブがヒットごとにプロバイダーAPI呼び出しになるのを防ぎます:

{"status": "ok", "qdrant": "reachable", "embedding": {"provider": "fastembed", "model": "intfloat/multilingual-e5-large", "ok": true}}

トークンは BLUEOCEAN_AUTH_TOKEN(環境変数 / .env)で設定し、--auth-token CLI フラグでは設定しないでください。CLI 引数として渡された値は、ps を介して他のローカルユーザーから見える可能性があります。リクエストアクセスログもデフォルトでオフです(access_log=False)。サポートされている5つのクライアントのうち3つは ?token=... としてトークンを送信するため、プレーンなアクセスログはすべてのリクエストでトークンを平文でログに記録することになります。


localhost を超えたデプロイ

docker compose up -d は2つの長期稼働サービスを起動します:qdrant(ポート6333)と blueocean-mcp(ポート8765)。クラウドの場合、同じ2つのサービスを ECS Fargate(または Qdrant Cloud と小さな Fargate/App Runner サービス blueocean-mcp)に移行します。パブリック URL を各ツールにローカルと同じ方法で登録します。Dockerfile は埋め込みモデルを固定するため、クラウドで生成されたベクトルはラップトップで生成されたものと互換性があります。

Kubernetes は docker-compose.yml の healthcheck: を読み取りません。Pod 仕様に独自のプローブが必要ですが、同じパスを指すことができます:

readinessProbe:
  httpGet: { path: /health, port: 8765 }
livenessProbe:
  httpGet: { path: /health, port: 8765 }

触る前に知っておくべきいくつかの注意点

  • qdrant-client は Qdrant サーバーの正確なバージョンに固定されています(docker-compose.yml のイメージタグを参照)。Qdrant はクライアントとサーバーを連動してバージョン管理しており、API はリリース間で変更されています。.search() は 1.19 で .query_points() に置き換えられました。サーバーイメージをバンプする場合は、qdrant-client も一致するようにバンプし、テストスイートを再実行してください。実際のデータで複数バージョンを飛ばさないでください。最初にスナップショットを取ってください。

  • mcp は >=2.0.0,<3.0.0 に固定されています。これはほとんどの依存関係よりも厳しい制約です。その API(mcp.server.mcpserver.MCPServer など)はリリース間で大幅に形状が変わっており、緩い制約では Docker ビルドが互換性のないものを静的に解決するリスクがあります。Docker ビルドは uv.lock を使用しません。

  • 埋め込みプロバイダーとモデルはペアです。 どちらかを変更すると、古いベクトルは新しいベクトルに対して検索不可能なゴミになります。ライブラリのデフォルトに頼るのではなく、.env でモデルを固定してください。デフォルトはあなたの知らないうちに変更される可能性があります。


ライセンス

MIT — LICENSE を参照してください。

Available Tools

8 tools
memory_deleteC

Delete a single memory entry by ID.

NameRequiredDescriptionDefault
projectYes
point_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full disclosure burden. It only says 'Delete', which implies irreversibility, but fails to state this explicitly, required auth scopes, or if the deletion is soft or hard. No annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no filler. Could arguably add 'irreversibly' for transparency, but current length is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 required params, 0% coverage, an output schema exists but is not referenced, and 7 siblings. The description is too minimal; it omits return value info, ID source hints, and deletion semantics. Incomplete for reliable agent selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate. It does not explain what 'project' or 'point_id' represent, their formats, or any validation rules. The description adds no paramenter meaning beyond the schema's field names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete') and the resource ('a single memory entry'), differentiated from siblings like memory_store or memory_search. The 'by ID' detail specifies the key identifier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use vs alternatives (e.g., memory_summarize_session might delete differently), no prerequisites for which IDs are valid, and no consequences like cascading effects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_getA

Fetch the full content of a single memory entry by ID.

NameRequiredDescriptionDefault
projectYes
point_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full behavioral burden. It states it retrieves content, but it does not disclose any side effects (none expected for get), permissions needed, or error behavior (e.g., what happens if point_id not found). The lack of annotations is mitigated by the read-only nature implied by 'Fetch', but more context on behavior would improve the score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, short and front-loaded with action and object. It contains no redundant information, earning its place. However, it lacks any additional detail that could make it more helpful without expanding much.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 parameters, no output schema, no nested objects), the description is adequate for a basic retrieval. However, it leaves gaps: the 'project' parameter is unexplained, and the response format is not described (no output schema). A more complete description could clarify the project scope or that the full content is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. The description mentions 'by ID' which aligns with 'point_id', but it does not explain the 'project' parameter's role or provide any context beyond what the schema already offers. The description adds minimal value, leaving the agent to infer the purpose of 'project'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch'), identifies the resource ('a single memory entry'), and specifies the retrieval mode ('full content by ID'). It clearly distinguishes from sibling tools like memory_search (searches) or memory_list_projects (lists), as it targets a single entry by a unique identifier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description is clear but does not provide explicit guidance on when to use this tool vs alternatives. It implies usage for retrieving a known memory entry by ID, but it does not mention when not to use it (e.g., for partial content) or direct the agent to other tools like memory_search for lookup by content.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_list_projectsB

List all projects that have a memory collection.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It only says 'List all projects,' failing to disclose read-only nature, return format, authentication needs, or any side effects. This is insufficient for safe agent usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence with no unnecessary words. Every part adds value, and it is front-loaded with the action and target.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and low complexity, the description should clarify what is returned (list of project names? IDs?). It is adequate for a simple listing but incomplete for an agent to fully understand the output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so schema coverage is 100% by default. Per guidelines, 0 params yields a baseline of 4. The description adds no param semantics, but none are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists 'all projects that have a memory collection,' using a specific verb and resource. It is distinct from sibling tools like memory_store or memory_search, though it does not explicitly differentiate from memory_stats or memory_manifest.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool vs alternatives (e.g., memory_stats might list stats). The description only states what it does, leaving the agent without context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_manifestC

Show the areas/modules present in a project's memory.

NameRequiredDescriptionDefault
projectYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears full responsibility for disclosing behavioral traits. It does not mention whether the operation is read-only, what happens if the project does not exist, or any side effects (likely none). The verb 'Show' implies a read operation, but this is not explicitly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is very concise. However, it is somewhat under-specified for a tool with no annotations and no param descriptions, so it leans slightly toward being too brief rather than optimally informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool complexity (1 required param, no annotations, no output schema), the description is incomplete. It does not explain what 'areas/modules' mean, what the output format looks like, or how this differs from memory_stats. An agent would need to infer too much.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the single parameter 'project'. It does not explain what valid project values are, how to specify them (e.g., name, ID), or whether the parameter is case-sensitive. This leaves the agent guessing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Show' and the resource 'areas/modules present in a project's memory', which is specific and distinguishes it from siblings like memory_stats (which likely shows statistics) or memory_store (which stores data).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as memory_stats or memory_search. The description does not provide context about what kind of memory overview this offers or when it is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_statsB

Admin: collection stats (count, importance/area distribution, size).

NameRequiredDescriptionDefault
projectYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears full responsibility for behavioral disclosure. It mentions the output includes 'count, importance/area distribution, size' but does not explicitly state that the operation is read-only, what permissions are required beyond 'Admin', whether any side effects occur, or if rate limits apply. The safety profile is only implied by the nature of 'stats'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—one short sentence with no filler. It front-loads the key information ('Admin: collection stats') and then lists the statistics provided. However, it could be slightly more informative without losing conciseness (e.g., specifying the parameter). It earns its place but is at the edge of under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema), the description covers the high-level output but omits the return format (e.g., object keys, data types) and any explanation of valid values for 'project'. With no output schema, the agent might need to guess the structure. The description is minimally complete for a stats retrieval but lacks enough detail for reliable invocation without domain knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single required parameter 'project'. The description does not explain what 'project' represents (e.g., project name, ID, or path) or how to use it. The phrase 'collection stats' loosely ties to the parameter, but the agent is left guessing whether 'project' refers to a project identifier or a collection name. The description adds no semantic value beyond the schema's bare type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: it provides admin-level collection statistics including count, importance/area distribution, and size. This distinguishes it from sibling tools like memory_list_projects (which lists projects) and memory_search (which searches within a collection). The verb 'stats' implies retrieval, and the resource is 'collection stats', making the intent unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The prefix 'Admin:' hints at restricted access, but there is no explicit statement of prerequisites, user roles, or scenarios where other tools (e.g., memory_list_projects, memory_get) would be more appropriate. The agent receives no help in deciding between memory_stats and its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_storeC

Persist a memory entry for a project (content + condensed summary + importance + area/module).

NameRequiredDescriptionDefault
areaYes
moduleYes
contentYes
projectYes
summaryYes
metadataNo
importanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It mentions persistence but does not state whether this is a create or update operation, if it overwrites existing entries, or what idempotency guarantees exist. For a tool that stores data, these details are critical.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise and front-loaded. It effectively conveys the core action, but could benefit from a second sentence to cover usage guidance or behavioral notes without being overly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, 0% schema coverage, no annotations, and an output schema (not described), the description is incomplete. It fails to clarify what the tool returns, how conflicts are handled, or how 'importance' is interpreted. The sibling tools suggest a rich system, but this description lacks enough detail for an agent to use it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needs to compensate. It mentions content, summary, importance, area, and module but adds no extra context (e.g., format, constraints, or relationships). The 'metadata' and 'importance' parameters lack any semantic explanation beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it persists a memory entry and lists the key fields (content, condensed summary, importance, area/module). It distinguishes the tool from siblings like memory_search and memory_get, but could be more explicit about its unique role among the sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool vs alternatives like memory_summarize_session or memory_manifest. It does not specify prerequisites, when not to use it, or how it fits into the workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_summarize_sessionC

Store a condensed summary of a work session for later retrieval.

NameRequiredDescriptionDefault
areaYes
projectYes
conclusionYes
importanceNo
session_idYes
observationsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only states 'store for later retrieval' without disclosing side effects like overwriting, idempotency, or dependencies. With no annotations, the bare description fails to convey behavioral traits beyond basic write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 10 words, which is very concise. However, it lacks any structure (e.g., bullet points, examples) and does not earn its place by providing sufficient information for a tool with 6 parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 6 parameters (5 required), 0% schema coverage, and no annotations, the description is severely incomplete. It does not explain the purpose of each parameter, expected output, or constraints, making it inadequate for correct tool invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description adds no parameter-level meaning. The agent receives no explanation for fields like project, area, observations, conclusion, session_id, or importance, leaving critical semantics ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool stores a condensed summary of a work session, using a specific verb and resource. It distinguishes from generic memory_store by emphasizing session summaries, but does not explicitly differentiate from siblings like memory_store or memory_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., memory_store for raw data, memory_search for retrieval). The description lacks context for prerequisites or preferred scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.1.0
    • First observedmemory_delete
    • First observedmemory_get
    • First observedmemory_list_projects
    • First observedmemory_manifest
    • First observedmemory_search
    • First observedmemory_stats
    • First observedmemory_store
    • First observedmemory_summarize_session

TDQS

B3.3/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct memory operation: stats, store, search, get by ID, delete, list projects, manifest areas, and session summary. No two tools overlap in purpose, ensuring clear differentiation for an agent.

Naming Consistency5/5

All tools follow the uniform 'memory_<verb>_<noun>' pattern with snake_case. Verbs are descriptive and consistent (stats, store, search, get, delete, list_projects, manifest, summarize_session), making the set predictable and easy to navigate.

Tool Count5/5

With 8 tools, the surface covers the core memory management lifecycle (create, read, delete, search) plus administrative utilities (stats, manifest, project listing, session summary). This is well-scoped without being excessive or sparse.

Completeness4/5

The tool set covers the fundamental CRUD operations except for an explicit update/modify tool. While search and get provide read access, and store creates new entries, the absence of an update operation is a minor gap that agents may need to work around.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A self-hosted MCP server that provides AI assistants with a shared, persistent SQLite-backed memory for storing and retrieving project context, decisions, and discoveries. It enables cross-session continuity and team-wide knowledge sharing to keep AI coding tools aligned and informed.
    3
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    MCP server that provides cross-session persistent memory for AI coding assistants using local vector database and semantic search, enabling automatic recall of project context, issues, and tasks.
    9
    137 PyPI
    92
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Shared memory MCP server for AI coding agents, enabling context sharing across sessions with local SQLite or cloud-based semantic search, compatible with Claude Code and Cursor.
    2
    32 npm
    1
    MIT