brain-v42
brain-v42
MCP上で提供される、コーディングエージェント向けの永続メモリ。
brain-v42は、Claude Code、Codex、その他のMCPクライアントに永続的なセカンドブレインを提供します:決定、学び、コードスニペット、ランブック、ADR、チケット、プロジェクトロードマップをPostgreSQLに保存し、全文検索+セマンティック検索とリランキングで取得し、毎晩エージェントパイプラインによって統合されます。
型付けされた知識であり、単なるメモの寄せ集めではない — 決定はそのWHYと代替案を記録し、スニペットはその意図を記録し、ランブックは実行可能なステップを記録します。各型は独自のライフサイクルを持ちます(置き換えチェーン、ADRの受理、ラーニングの検証)。
明示的なセッションライフサイクル — すべてのセッション境界はユーザーが所有します。セッションは生成した成果物を記録し、クローズはフェイルクローズです:セッションは、記録された知識または明示的な「nothing to capture」という理由のいずれかで終了し、決して沈黙はしません。
ランキングを行う検索 — pgvectorによるセマンティック検索 + PostgreSQL FTSを、クロスエンコーダーで融合して再ランキングします。
夜間の統合(「dream」) — エージェントパイプラインが、孤立リンクの掃除、重複のマージ、ラーニングの統合、プロモーションの提案を行います。すべてのフェーズは初期状態で無効化されたキルスイッチの背後で実行されます。
マルチプロジェクト — プロジェクトごとのフォーカスに、比較と交換によるリビジョン、ロードマップ、プロジェクト横断のチケット。
アーキテクチャ
Claude Code / Codex (MCP client)
│ HTTP loopback :8765/mcp (production) · stdio (dev/fallback)
brain-v42 (FastMCP)
├── SQLAlchemy async ─▶ PostgreSQL 16 + pgvector (source of truth)
├── HTTP ─────────────▶ embedding endpoint :8003 (optional, pluggable)
├── HTTP ─────────────▶ :8003/rerank (optional reranker)
└── bolt ─────────────▶ Neo4j 5 Community (relationship index, optional)MCPトランスポート:本番 = HTTPループバック http://127.0.0.1:8765/mcp; 設定デフォルトおよび開発/フォールバック = stdio。
PostgreSQLが唯一の真実源です。Neo4jはリレーショナルな台帳/アウトボックスから供給される使い捨て可能なプロジェクションであり、常にPostgreSQLから再構築できますが、その逆はありません。この正規パスは2026年7月22日から本番で稼働しています。設計と根拠はdocs/ARCHITECTURE.mdとgraph ledger runbookにあります。
埋め込みはオプションかつプラグイン可能です。サーバー自体はモデル非依存です。POST /embed、POST /embed/query、POST /rerank の3ルートからなるHTTP契約のみを話し、エンドポイントが利用できない場合はグレースフルに劣化します。brain_searchは全文検索にフォールバックし、書き込みはNULL埋め込みで永続化され、後でバックフィルされます。この契約を実装するサーバーならどれでも動作します。バンドルされているリファレンススタック(services/)は、ローカルGPU上のllama.cppを介してQodo-Embed-1-1.5BをGGUFとして提供します。EMBEDDING_DIMENSIONはインストール時に選択され、後でモデルを切り替える場合はコーパスの再埋め込み(scripts/regen_embeddings.py)が必要です。
Related MCP server: Muninn
クイックスタート
git clone https://github.com/hawkixs/brain-v42 && cd brain-v42
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
# 1. Local Neo4j secret (skip if you run without the graph)
install -d -m 0700 .secrets
read -rsp "Neo4j password (same value as NEO4J_PASSWORD in .env): " PW
(umask 0022; printf 'neo4j/%s\n' "$PW" > .secrets/neo4j-auth); unset PW
# 2. Databases (PostgreSQL 16 + pgvector, Neo4j)
docker compose up -d
# 3. Migrations
export POSTGRES_URL="postgresql+asyncpg://brain:REPLACE_WITH_PASSWORD@localhost:5433/brain"
BRAIN_ALEMBIC_ALLOW_PROD=1 alembic upgrade head
# 4. Run the MCP server (stdio)
python -m brain_v42.mcp.serverClaude Codeに配線するには、リポジトリルートの.mcp.jsonがすでに本番HTTPループバックエンドポイントを対象にしています。プレーンなstdio開発セットアップの場合は:
claude mcp add brain-v42 -- python -m brain_v42.mcp.serverBRAIN_ALEMBIC_ALLOW_PRODは、データベース名が正確にbrainの場合にのみ必要です。これを1コマンドのオプトインに留め、永続的にエクスポートしないでください。AlembicはDSNクエリパラメータを拒否します。上記のプレーンな形式で、ホスト、ポート、ユーザー名、パスワードをすべて指定してください。
MCPツール
ドメイン | ツール |
検索と一覧 |
|
グラフ探索 |
|
セッションライフサイクル |
|
プロジェクトコンテキスト |
|
決定 |
|
ラーニング |
|
スニペット |
|
ランブック |
|
ADR |
|
調整 |
|
dream / グラフ |
|
ロードマップと減衰 |
|
ワークフローガイダンス |
|
シグネチャ付きの完全なカタログ:docs/MCP_TOOLS.md。
デフォルトのカタログプロファイルはcompactです。7つのセッションライフサイクルツールは表示されたままになり、その他のすべてのツールは2つのゲートウェイ、つまり発見のためのbrain_find_toolと呼び出しのためのbrain_call_toolを介してアクセスされます。BRAIN_MCP_PROFILE=nativeを設定すると、すべてのツールを直接公開できます。
セッション
ユーザーはすべてのセッション境界を制御します。start、resume、end、abandonは明示的なコマンドであり、フック、エージェント、クライアントによって推測されることはありません。セッションは生成した永続的な成果物を排他的な台帳に記録し、クローズはフェイルクローズです。記録された知識、または明示的な「nothing to capture」という理由のいずれかであり、沈黙はありません。
ハートビートが24時間ない場合、オープン中のセッションはis_stale=trueを公開します。このマーカーは導出されるものであり、永続的なステータスはopenのままです。明示的なユーザーコマンドなしにセッションを放棄するのは、7日間のサーバーサイドスイープだけです。
完全なライフサイクル契約(キャプチャルール、フォーカスセマンティクス、ブリーフィング)はdocs/MCP_TOOLS.mdにあります。契約はv4であり、まだ進化中です。
設定 (.env)
# Required
POSTGRES_URL=postgresql+asyncpg://brain:REPLACE_WITH_PASSWORD@localhost:5433/brain
# Optional — semantic search and reranking
EMBEDDING_SERVICE_URL=http://localhost:8003
EMBEDDING_DIMENSION=1536
RERANKER_URL=http://localhost:8003
# Optional — relationship graph (safe defaults for a fresh environment)
GRAPH_ENABLED=false
GRAPH_LEDGER_WRITE_ENABLED=false
# Tool catalog profile
BRAIN_MCP_PROFILE=compact # compact (default) or native
LOG_LEVEL=INFOMCP_HTTP_TOKENやMCP_HTTP_DREAM_TOKENSを共有の.envに置かないでください。ベアラートークンはプライベートな0600ファイル(~/.config/brain-v42/mcp-token.env)に置き、グラフプロジェクターの認証情報は専用のファイル(~/.config/brain-v42/graph-projector.env)に置きます。完全なリファレンス — すべての変数、プライベートな秘密ファイル、事前チェック、ロールアウトゲート: docs/OPERATIONS.md。
ネットワーク信頼モデル
このデプロイは、信頼できるLAN上の個人エージェントを対象としています。MCP、PostgreSQL、Neo4jはループバックにバインドされ、メトリクスと自動化もデフォルトでループバックです。
埋め込みトポロジー:本番/デフォルト = ローカル統合エンドポイント http://localhost:8003; deploy/dev-pcは置き換えられたロールバック/リファレンスパスです。
リランカーは統合埋め込みエンドポイント:8003/rerankを共有します。自分で実際のバインドを確認するまで:8003はLANに公開されているものとして扱い、インターネットには決して公開しないでください(MCPポートも同様です)。リポジトリのコードだけでは、実際のファイアウォールの状態を証明できません。
Dreamモード
夜間のエージェントパイプライン(scripts/dream.sh:スキャン → クリーン → 接続 → 統合 → プロモート → 再編成)に加え、サーバーサイドのチケット抽出、ロードマップキュレーション、セッションスイープジョブがあります。変更を伴うすべてのフェーズはキルスイッチの背後にあり、すべてのキルスイッチは初期状態で無効化されています。ドライランが標準のデフォルトです。各フェーズは正確なMCPツール許可リストの下で実行されます。詳細: docs/ARCHITECTURE.md と docs/OPERATIONS.md。
本番状態
リポジトリのマイグレーションターゲットはマイグレーション045です。このリポジトリのどのページも、実際のスキーマヘッドを証明するものではありません — ここで読むのではなく、測定してください:
docker exec brain_v42_postgres psql -U brain -d brain -Atc "select version_num from alembic_version;"実行中のビルドはそれ自体を名乗ります。GET /healthはversion(インストールされたディストリビューション)とalembic_head(それに同梱されるリビジョン)を返します。どちらも測定された値であり、手書きされることはありません。
開発
pytest tests/unit -v # no PostgreSQL required
pytest --cov=brain_v42 --cov-report=term-missing
ruff check src/ tests/ && ruff format --check src/ tests/
mypy src/スタック: Python 3.12+、FastMCP 3.x、SQLAlchemy 2.0 async + asyncpg、Alembic、Pydantic 2、structlog。
TDDは必須 — レッド、グリーン、リファクタリング。コードを通過させるためにテストを編集することは決してありません。
カバレッジ下限: 60%(CIがそれ未満をブロックします)。
開発ツールチェーンは正確に固定されています(
pip install -e ".[dev]")。これにより、ローカルは常にCIと一致します。
プロジェクト構成
brain-v42/
├── src/brain_v42/
│ ├── config.py # pydantic-settings — single config surface
│ ├── db/ # SQLAlchemy engine + tables
│ ├── models/ # Pydantic models
│ ├── repositories/ # CRUD + FTS + pgvector + graph adapters
│ ├── services/ # business logic, embedding, reranker, dream, dedup
│ ├── metrics/ # sidecar + collector + cockpit endpoint
│ ├── automation/ # independent webhook/dedup runtime (:9201)
│ └── mcp/ # FastMCP server + brain_*/dream_* tool handlers
├── tests/{unit,integration}
├── alembic/versions/ # migrations (shipped inside the wheel)
├── scripts/ # operational CLIs (dream.sh, canaries, repair)
├── services/ # GPU embedding service + shim + supervisor
├── deploy/ # systemd units, per-host compose, install.sh
└── docs/ # ARCHITECTURE, SCHEMA, MCP_TOOLS, OPERATIONS, runbooksCIではトップレベルのモジュールグラフが非巡回であることが強制されます(scripts/check_module_layering.py)。これにより、どのモジュールもサイクルを引きずらずにスタンドアロンサービスとして抽出できます。
CI/CD
ステージ:lint → test → security → build。セキュリティゲート:pip-audit、bandit、gitleaks、コンテナイメージのピン留めチェック。Dockerイメージはmain上でビルドされプッシュされます。デプロイステージはありません。ホストへのロールアウトは常に手動の帯域外ステップです。リリースはタグ駆動です。リリースレールはwheel + sdistをビルドし、wheelがマイグレーションを同梱していることを証明し、両方をGitHubリリースに添付します。
バージョニング
出荷バージョンは0.2.0であり、意図的に
0.xのままです。1.0.0は安定したインターフェースと後戻りの道を約束することになりますが、このプロジェクトにはそのどちらもまだありません。どのバージョンでも、ロスレスなダウングレードは保証されません。 2つのマイグレーションは自身の
downgradeを拒否します。037はセッションキャプチャが失われるとすぐにSQLEXCEPTIONを発生させ、039はオペレーターが明示的な-xオプトインを渡さない限り発生させます。したがって、スキーマのロールバックはランブックを伴うオペレーター手順であり、バージョン保証ではありません。代わりにスナップショットから復元してください。
ライセンス
ソースコード: Apache-2.0。
モデルの重みはそのライセンスの対象ではありません。これは形式的なものではありません。本番用埋め込みモデル Qodo/Qodo-Embed-1-1.5B は、QodoAI-Open-RAIL-M の下で公開されています — これは、使用に基づく制限を伴うライセンスであり、寛容なライセンスではありません。このリポジトリには重みは保存も配布もされていません:すべてのモデルは、ビルド時にオペレーターがアップストリームのホストからダウンロードし、各モデルの規約をその発行元から直接受け入れます。再配布する前に NOTICE を参照してください。
Available Tools
11 toolsbrain_call_toolA
Call a tool by name with the given arguments.
Use this to execute tools discovered via search_tools.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the tool to call | |
| arguments | No | Arguments to pass to the tool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only says 'Call a tool by name' and does not mention potential side effects, error behavior, dynamic execution risk, or that it can invoke arbitrary tools with arbitrary consequences. This is a significant gap for an execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, action stated first. The second sentence provides essential context (use after search_tools) without redundancy. Excellent front-loading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter tool, the description covers the core action and usage context. However, without an output schema or annotations, it omits return value behavior and error handling, which an agent might need when invoking arbitrary tools. It is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description adds marginal value by linking parameters to 'given arguments' from search_tools, but does not enrich semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Call') and resource ('a tool by name with the given arguments'), and differentiates itself from discovery tools by positioning it as the execution step after search_tools. This makes it unambiguous against siblings like brain_find_tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Use this to execute tools discovered via search_tools' gives clear context of when to invoke it (after discovery) and implies it is not for searching. It does not explicitly exclude session-management siblings, but the usage context is sufficient for a generic dispatcher.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_find_toolA
Search for tools using natural language.
Returns matching tool definitions ranked by relevance, in the same format as list_tools.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language query to search for tools |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses that the tool returns definitions rather than executing tools, indicates relevance ranking, and references the list_tools output format. It does not explicitly state lack of side effects, but the search/return framing makes the read-only behavior clear enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The action is front-loaded and the return behavior is described in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, output-schema-bearing search tool, the description is complete: it states the query source, the result type, ranking behavior, and output format. No critical invocation information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'query' parameter is already described as a natural language query. The description adds no additional semantic detail beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Search for tools') and resource ('tool definitions'), and adds that results are ranked by relevance. This differentiates it from session lifecycle tools and brain_call_tool without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use case: natural-language discovery of tools, as opposed to session manipulation or direct tool invocation. However, it does not explicitly name alternatives or state when not to use it, such as preferring list_tools for browsing all tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_session_abandonBDestructiveIdempotent
Abandon a session only from an explicit user command.
An agent tracer is the only session the server opens or closes on its own; no hook and no auto-close may invoke this lifecycle boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| session_id | Yes | ||
| expected_client_key | Yes | Client identity expected for the addressed session UUID. The pair must match before any session mutation. This is an isolation guard, not authentication. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, which cover the destructive nature. The description adds the explicit-user-command constraint and notes that only an agent tracer session is server-managed. However, it does not describe consequences (e.g., irreversibility, impact on session data) beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the primary action and constraint. The second sentence adds relevant context about the agent tracer without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with three required parameters and no output schema, the description is sparse. It does not explain what 'abandon' entails versus brain_session_end, what the response contains, or prerequisites beyond the schema. The annotation and schema cover only part of the operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only expected_client_key has a description). The tool description provides no parameter information, failing to compensate for the low coverage. An agent receives no guidance on session_id or reason beyond the schema's minimal type constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('abandon a session') and resource, and adds a critical constraint ('only from an explicit user command'). It does not explicitly differentiate from the sibling brain_session_end, but the user-command qualifier hints at a distinct lifecycle role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('only from an explicit user command') and when-not-to-use ('no hook and no auto-close may invoke this lifecycle boundary'). It does not name alternative tools directly, but the constraint is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_session_bindAIdempotent
Bind an open operator session to one focus slot, from an explicit user command.
Once per session; binding the same slot again is a replay. From then on the
session's end writes that slot only, never the project base:
expected_focus_revision is the slot revision returned here. Refusals:
session_not_open, session_is_agent_trace, session_already_bound,
slot_not_found, slot_closed, slot_project_mismatch, slot_busy.
An agent tracer is the only session the server opens or closes on its own; no hook and no auto-close may invoke this lifecycle boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| slot_id | Yes | ||
| session_id | Yes | ||
| expected_client_key | Yes | Client identity expected for the addressed session UUID. The pair must match before any session mutation. This is an isolation guard, not authentication. |
Output Schema
| Name | Required | Description |
|---|---|---|
| slot_id | Yes | |
| slot_body | Yes | |
| session_id | Yes | |
| slot_revision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly=false, idempotent=true, destructive=false), and the description goes further: it explains the downstream effect that `end` writes only the bound slot and never the project base, enumerates all seven refusal codes, and states the replay rule. This is unusually rich disclosure and consistent with the idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key action and trigger are front-loaded in the first sentence, then constraints and refusals follow. The prose is dense with internal jargon and the refusal list is unglossed, but every sentence carries substantive information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the description adequately covers lifecycle rules, replay behavior, and failure modes. Its one real gap is the near-total absence of input-parameter meaning, which is left to a thin schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, with just `expected_client_key` documented inline. The description explains none of the three input parameters (slot_id, session_id, expected_client_key); the only parameter it references, `expected_focus_revision`, is not an input at all. It therefore fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause states a specific verb and resource: 'Bind an open operator session to one focus slot.' It clearly belongs to the session lifecycle family, though it never names a sibling (e.g. brain_session_end/start) to disambiguate which lifecycle call to pick, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear triggering condition ('from an explicit user command') and a negative constraint ('no hook and no auto-close may invoke this lifecycle boundary'), plus once-per-session/replay semantics. What is missing is an explicit comparison to the adjacent lifecycle siblings an agent might otherwise choose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_session_captureAIdempotent
Attach durable artifacts from an explicit user command — to repair or refine.
No longer a compulsory ritual. With derived capture armed, artifacts
created during the session are attributed without this call, and end
no longer demands a receipt. What this tool is for now: attaching
something the derivation could not see — created outside the window,
on another connection, or in another project — and saying so on the
record.
It never steals: an artifact already attributed stays where it is.
An agent tracer is the only session the server opens or closes on its own; no hook and no auto-close may invoke this lifecycle boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| knowledge_ids | Yes | ||
| expected_client_key | Yes | Client identity expected for the addressed session UUID. The pair must match before any session mutation. This is an isolation guard, not authentication. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover idempotency and non-destructiveness; the description adds that already-attributed artifacts are left in place and that this is not a compulsory step. It does not disclose return behavior, permissions, or failure modes, so with annotations lowering the bar, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and usage are front-loaded in the first paragraphs, but the explanation includes redundant historical context ('No longer a compulsory ritual' followed by the derived-capture explanation) and a final lifecycle sentence that is tangential. It is readable but not every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a side-effecting 3-parameter tool with no output schema and with annotations, the description provides enough usage context to call correctly, including scope and idempotent ownership behavior. It lacks explicit statements about return values or errors and uses jargon like 'derived capture' and 'receipt' without definition, so completeness is only moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes only expected_client_key; the description adds meaning for knowledge_ids as durable artifacts and specifies their suitability (outside window/connection/project), plus the 'never steals' rule for already-attributed IDs. It does not discuss session_id or expected_client_key beyond schema, so it only partially compensates for the 33% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence identifies a specific action ('Attach durable artifacts') and trigger ('from an explicit user command'). Later text narrows the scope to artifacts the derivation could not see, which differentiates it from automatic capture, though it does not name sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: for artifacts created outside the session window, on another connection, or in another project. It also says when it is not needed, because derived capture attributes normal session artifacts and `end` no longer requires a receipt. It stops short of naming sibling alternatives, but the when/when-not guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_session_endADestructiveIdempotent
End a session from an explicit user command, on judgement alone.
nothing_to_capture_reason is now OPTIONAL. The old rule — a non-empty
ledger XOR a written reason — measured whether the client had DECLARED
its work. Derived capture feeds that signal from the server, and a check
is hollow the moment the thing it checks can influence its own signal;
worse, it made a session whose ledger the server had filled impossible
to close. Give a reason if you have one to give; a blank one is still
refused, because saying nothing and saying " " are not the same act.
What end still requires is what the server cannot produce for you:
a summary and a next focus. It REPORTS unattributed_in_window —
artifacts of this project created during the session that belong to no
ledger — as a measure, never a gate. It cannot refuse a close, and a
session cannot improve it by doing nothing.
For a bound session, expected_focus_revision is the SLOT revision (from
bind, resume, or relay's slot.revision), never started_focus_revision.
An agent tracer is the only session the server opens or closes on its own; no hook and no auto-close may invoke this lifecycle boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | ||
| next_focus | Yes | Jugement et engagements pour la session suivante — ce qui n'est pas dérivable automatiquement (ex : ne pas publier ce brouillon et pourquoi, une échéance et sa raison, une décision opérateur à respecter). N'y recopie pas l'état mesurable (révision de schéma, HEAD git, arbre propre, résultat de suite de tests) : il est déjà recalculé à chaque briefing depuis la source réelle, et une copie manuelle se périme en silence. | |
| session_id | Yes | ||
| expected_client_key | Yes | Client identity expected for the addressed session UUID. The pair must match before any session mutation. This is an isolation guard, not authentication. | |
| expected_focus_revision | Yes | ||
| nothing_to_capture_reason | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| session | Yes | Persistent state of one explicitly controlled concurrent session. |
| replayed | Yes | |
| focus_diff | No | |
| focus_at_end | Yes | |
| current_focus | Yes | |
| focus_outcome | Yes | Persisted outcome of the one focus update attempted while ending. |
| focus_revision_at_end | No | |
| current_focus_revision | Yes | |
| unattributed_in_window | Yes | |
| remaining_open_session_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint/idempotentHint/readOnlyHint=false, so the safety profile is covered. The description goes beyond them with substantive behavior: nothing_to_capture_reason is now optional, a blank-string reason is still rejected, `unattributed_in_window` is reported as a measure and cannot gate the close, and summary/next_focus are server-underivable requirements. It stops short of 5 because it never says what happens to the session record after the close or whether the operation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, which is good. But several sentences are rhetorical justification for a design decision ('a check is hollow the moment the thing it checks can influence its own signal', 'saying nothing and saying " " are not the same act') that consumes space without changing how an agent calls the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the lifecycle constraint, the required-judgement inputs, and the revision-slot trap. It is nearly sufficient for a 6-parameter destructive lifecycle tool; the missing piece is an explicit statement of how to choose this over brain_session_abandon.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, so the description must compensate, and it does for the two least-obvious parameters: expected_focus_revision is pinned to the SLOT revision from bind/resume/relay and explicitly not started_focus_revision, and nothing_to_capture_reason's new optionality plus blank-refusal rule is spelled out. summary, session_id, and nothing_to_capture_reason's value shape remain undocumented in both places, keeping it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb+resource ('End a session') and adds the operative scope ('from an explicit user command, on judgement alone'), which an agent can act on. It does not, however, name or contrast against the obvious sibling brain_session_abandon, so the boundary between the two lifecycle endings is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states both a positive trigger (explicit user command, agent judgement) and an explicit prohibition ('no hook and no auto-close may invoke this lifecycle boundary'), which is real when/when-not guidance. The gap is that it never names the alternative tool (brain_session_abandon) for the case where a session should be terminated without a summary/focus.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_session_heartbeatA
Refresh an open session from an explicit user command.
An agent tracer is the only session the server opens or closes on its own; no hook and no auto-close may invoke this lifecycle boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| expected_client_key | Yes | Client identity expected for the addressed session UUID. The pair must match before any session mutation. This is an isolation guard, not authentication. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, so the mutation is known. The description adds that this is a lifecycle boundary and only for explicit commands, but it does not explain what 'refresh' does to the session (e.g., extends timeout) or any side effects. It adds some context but not deep behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero wasted words. The main purpose is front-loaded, and the critical usage constraint is stated immediately after. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation with no output schema, the description is somewhat bare. It does not specify behavior for a closed session, failure modes, or the return value. The agent can infer that the session must be open from the phrase 'open session', but it is not explicitly guaranteed. Given the simplicity, this is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: session_id has only a format, while expected_client_key has a detailed description. The tool description itself does not elaborate on either parameter. Since the missing session_id is self-explanatory (a UUID), the description does not need to compensate much, but it still adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('refresh') with a clear resource ('an open session') and immediately distinguishes itself from siblings by stating it is the only lifecycle boundary invoked by explicit user command, not by hooks or auto-close. This fully differentiates it from brain_session_start/end/resume.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool ('from an explicit user command') and, more importantly, when not to use it ('no hook and no auto-close may invoke this lifecycle boundary'). This gives the agent a clear decision rule, even though alternatives are not named directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_session_listARead-onlyIdempotent
List sessions only in response to an explicit user command.
An agent tracer is the only session the server opens or closes on its own; no hook and no auto-close may invoke this lifecycle boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| status | No | open | |
| project_key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safe read-only nature is established. The description adds meaningful behavioral context beyond those annotations: the server only auto-opens/closes an agent tracer session, and hooks/auto-close must never invoke this boundary. This is valuable context, though it does not describe list ordering, pagination, or return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The primary action is front-loaded, and the critical invocation restriction is placed in the supporting sentence. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the unusual invocation policy, which is likely the highest-risk aspect of this tool. However, with no output schema and no parameter descriptions, the agent still lacks context about what a session entry contains, which status filters mean, and what the list response looks like. Adequate for basic invocation but with meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not compensate for any of the four parameters. The schema provides names, types, defaults, and the status enum, but meanings like 'stale', 'abandoned', and 'closed_inactive' are left unexplained, and project_key semantics are not addressed. With zero coverage, the description should add parameter context but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('List sessions') and adds a distinctive policy constraint: it runs only on explicit user command. It does not explain what kinds of sessions are returned or how this differs from sibling read tools, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use condition ('only in response to an explicit user command') and an explicit when-not-to-use condition ('no hook and no auto-close may invoke this lifecycle boundary'). It does not mention sibling alternatives, but the trigger and exclusion are clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_session_relayADestructiveIdempotent
Relay an open session onto its slot, or its project base: capture, end, restart.
One transaction: the named knowledge_ids are captured into the old session,
the handover is written under a compare-and-swap, the old session ends, and
a successor opens under new_client_key; its briefing follows. Two forms,
and exactly one revision per call.
Bound session: send expected_slot_revision; the handover (at most 4,000
characters) becomes the slot body and the successor stays on the slot. A
closed slot or a stale revision changes nothing and leaves the session open.
Unbound session: send expected_focus_revision, the BASE revision; the
handover becomes the project's whole base focus and the successor is
unbound. A stale revision (focus_revision_conflict) changes nothing and
leaves the session open, unlike end, which closes anyway. SHRINK GUARD: a
handover under 70% of the current base focus is refused (base_focus_shrink,
both lengths in the message), because it REPLACES the whole base: carry the
durable content over. Only an operator relay may pass allow_focus_shrink = true; a guard mod never can.
An equal replay returns the same successor with replayed = true; any other
payload on an ended session is terminal_conflict. The successor's next end
or relay sends result.slot.revision (bound: the SLOT revision, from bind,
resume, or relay) or result.focus_revision (unbound: the new BASE revision),
never started_focus_revision for a bound one.
A guard mod the operator explicitly enabled may make this call as a standing
user command, and only this one (Amendment — slot relay (ADR #34)); with
initiator = 'guard_mod' it is refused while
BRAIN_SESSION_RELAY_GUARD_MOD_ENABLED is false.
An agent tracer is the only session the server opens or closes on its own; no hook and no auto-close may invoke this lifecycle boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | ||
| handover | Yes | ||
| initiator | Yes | ||
| session_id | Yes | ||
| knowledge_ids | No | ||
| new_client_key | Yes | Stable identity for one intended session. Reuse it for every retry of that session; use a distinct stable key for each parallel session. | |
| allow_focus_shrink | No | ||
| expected_client_key | Yes | Client identity expected for the addressed session UUID. The pair must match before any session mutation. This is an isolation guard, not authentication. | |
| expected_slot_revision | No | ||
| expected_focus_revision | No | ||
| nothing_to_capture_reason | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| slot | No | |
| session | Yes | Persistent state of one explicitly controlled concurrent session. |
| briefing | No | |
| replayed | Yes | |
| focus_revision | No | |
| ended_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply the safety profile (destructive, idempotent); the description adds the substantive behavior: single-transaction CAS semantics, that stale revisions or a closed slot change nothing and leave the session open, the 70% shrink guard and its refusal code, the replayed/terminal_conflict outcomes, and the guard-mod environment gate. This is far beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but front-loaded, with labeled cases (Bound/Unbound/Shrink Guard) that let an agent scan rather than parse prose. Most sentences carry operational payload, though the trailing paragraph about the agent tracer is loosely tied to the call itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, 11-parameter lifecycle tool with an output schema, it covers transaction shape, guarded failure modes, and revision hand-off to the successor's next call. Remaining gaps: no explanation of `summary` or `nothing_to_capture_reason`, and the handover length figure differs from the schema constraint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 18% across 11 parameters, so the description must compensate, and it does for the critical ones: `expected_slot_revision` vs `expected_focus_revision` (base revision), `handover` content and its replacement semantics, `knowledge_ids` capture, `new_client_key` successor identity, `allow_focus_shrink` operator-only rule, and `initiator`. Gaps remain for `summary` and `nothing_to_capture_reason`, and it states a 4,000-character handover cap that conflicts with the schema's 10,000 maxLength.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('relay an open session onto its slot, or its project base') and unpacks it into the concrete lifecycle it performs: capture, end, restart via a successor. It explicitly distinguishes itself from the sibling `end` ('unlike `end`, which closes anyway'), so an agent can route between them without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit branching conditions: bound sessions require `expected_slot_revision`, unbound sessions require `expected_focus_revision`, and it names the failure modes that select differently. It also states when the tool may be invoked by a guard mod (operator-enabled, env flag on). It doesn't frame the choice against alternatives like `brain_session_capture` or `brain_session_resume` beyond the `end` contrast, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_session_resumeBRead-onlyIdempotent
Resume an open session from an explicit user command.
An agent tracer is the only session the server opens or closes on its own; no hook and no auto-close may invoke this lifecycle boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| expected_client_key | Yes | Client identity expected for the addressed session UUID. The pair must match before any session mutation. This is an isolation guard, not authentication. |
Output Schema
| Name | Required | Description |
|---|---|---|
| session | Yes | Persistent state of one explicitly controlled concurrent session. |
| briefing | No | |
| slot_closed | No | |
| current_focus | Yes | |
| open_session_count | Yes | |
| current_focus_revision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, yet the description calls this a "lifecycle boundary" that the server "opens or closes," and the schema states the client-key pair must match "before any session mutation." Resuming a session is an intentional state change, so the description directly contradicts the readOnly annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the primary action stated first and the lifecycle constraint second; no filler. Slightly cryptic phrasing ("agent tracer") costs it a point but the structure is sound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the invocation precondition (explicit user command). However, for a mutating lifecycle operation it omits what state changes on resume, error behavior for a closed/unknown session, and any detail on the undocumented session_id parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: expected_client_key is well documented in-schema, but session_id carries no description anywhere. The description adds no meaning about either argument (e.g., which session UUIDs are valid, what happens if the client key mismatches), so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (resume) and resource (an open session) and scopes it to explicit user commands, which separates it from the lifecycle-start path in siblings like brain_session_start. It does not name any sibling explicitly, so differentiation still requires inference from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"From an explicit user command" gives a clear when-to-use trigger, and the second sentence effectively says when NOT to use it (no hooks, no auto-close). It stops short of naming the alternative to call for a brand-new session, so the routing guidance is good but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_session_startAIdempotent
Start or replay a concurrent session from an explicit user command.
An agent tracer is the only session the server opens or closes on its own; no hook and no auto-close may invoke this lifecycle boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| client_key | Yes | Stable identity for one intended session. Reuse it for every retry of that session; use a distinct stable key for each parallel session. | |
| project_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| session | Yes | Persistent state of one explicitly controlled concurrent session. |
| briefing | No | |
| replayed | Yes | |
| open_session_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover idempotency, destructiveness, and read-only hints. The description adds value by disclosing that this is a controlled lifecycle boundary and that the server only opens/closes agent tracer sessions on its own. This is behavioral context beyond what annotations provide, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The main action and trigger are front-loaded, and the second sentence earns its place by preventing incorrect automatic invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema and annotations cover return values and safety traits, so those gaps are acceptable. However, the required project_key parameter is left unexplained, and the relationship between 'start/replay' and the sibling brain_session_resume is not clarified. This is a meaningful gap for an agent deciding which session tool to call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter-level meaning. The schema describes client_key well, but project_key has no description and is required; the description does not compensate for that gap. With 50% schema coverage, the description should have provided at least some project/session context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start or replay') and the resource ('a concurrent session'), plus the specific trigger ('from an explicit user command'). It does not explicitly distinguish itself from sibling brain_session_resume, and 'replay' vs 'resume' creates some potential overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use context: only from an explicit user command. It also gives a clear exclusion: no hook and no auto-close may invoke this lifecycle boundary. It does not name alternatives like brain_session_resume, but the trigger guidance is strong.
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.
3 tool updates
v0.6.7- Added
brain_session_bind - Added
brain_session_relay - Changed
brain_session_resume1 field changed- added
Output schema / properties / slot_closedAdded value: +{ + "default": false, + "type": "boolean" +}
9 tool updates
v0.6.1- First observed
brain_call_tool - First observed
brain_find_tool - First observed
brain_session_abandon - First observed
brain_session_capture - First observed
brain_session_end - First observed
brain_session_heartbeat - First observed
brain_session_list - First observed
brain_session_resume - First observed
brain_session_start
TDQS
Scored across 11 tools
Each of the nine session lifecycle tools targets a distinct action (start, resume, heartbeat, end, abandon, bind, capture, relay, list), and the two meta tools (call_tool, find_tool) are clearly separate. However, the extremely verbose and overlapping conceptual descriptions (repeated 'agent tracer' boilerplate, relay containing capture/end/restart) could still cause occasional misselection between related lifecycle boundaries.
All tools use snake_case with a consistent 'brain_' prefix. Session tools follow 'brain_session_<action>' and meta tools follow 'brain_<verb>_tool', which is a minor deviation in pattern but still predictable and readable.
11 tools is well within the ideal range and each tool earns its place: nine cover the complex session lifecycle (create, resume, refresh, end, abandon, bind, capture, relay, list) and two provide dynamic tool discovery/execution. No tools appear redundant or missing from a count perspective.
The session lifecycle surface is comprehensive: start, resume, heartbeat, end, abandon, bind, capture artifacts, relay handover, and list. A dedicated 'get_session' or 'status' tool might be a minor gap, but list and resume likely cover most needs, and the meta tools add extensibility.
Maintenance
Related MCP Connectors
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Hosted MCP memory for coding agents: persistent across sessions, editable markdown, team sharing.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides persistent memory for AI coding agents via MCP, enabling teams to share and recall facts across sessions. Automatically captures, classifies, and curates knowledge from supported transcript sources.1833 npm1AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceProvides persistent memory for AI coding agents via MCP, allowing them to recall fragility, decisions, and bugs across sessions.406 npm3MIT
- AlicenseNot gradedqualityDmaintenanceProvides persistent memory and task management for coding agents via MCP tools, enabling mid-session recall and capture of durable knowledge.360 npm11MIT
- AlicenseNot gradedqualityAmaintenanceProvides persistent, searchable memory across coding projects and machines, letting agents record and retrieve projects, reusable assets, sessions, decisions, commits, and handoffs via MCP.2Apache 2.0