mcpField
T
thread-mind

thread-mind

ローカル
github.com/mahmoud-nbメモリ・ナレッジ32 週間前に更新

thread-mind について

ThreadMind は、プロジェクトの議論をリポジトリ内の Markdown のスレッドツリーとして保存する、コーディングエージェント向け MCP サーバーです。新しいセッションでは、アクティブなスレッドと祖先の決定事項や制約を読み込み、Git ブランチとの連携やチームレビューにも対応します。

主な機能

  1. 01スレッド要約を Markdown で保存
  2. 02祖先スレッドに沿ったコンテキスト構成
  3. 03スレッドの作成、切り替え、統合
  4. 04Git ブランチに応じたスレッドの有効化
  5. 05要約対象コードの変更を通知
  6. 06コミットとレビューによる共同作業

活用シーン

  1. 01新しいセッションでプロジェクトの決定事項を復元
  2. 02別スレッドで実装案を比較検討
  3. 03プルリクエストで共有メモリをレビュー
  4. 04要約後のコード変更を把握

MCP 対応

MCP サーバーとして、プロジェクトやスレッドを管理するツールをクライアントに提供し、アクティブなスレッドの構成済みコンテキストを返します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"mahmoud-nb-thread-mind": {
"command": "npx",
"args": [
"-y",
"thread-mind-mcp"
],
"env": {
"THREADMIND_ROOT": "<THREADMIND_ROOT>",
"THREADMIND_AUTHOR": "<THREADMIND_AUTHOR>"
}
}
}
}
起動コマンドnpx -y thread-mind-mcp
設定が必要な環境変数
THREADMIND_ROOTProject directory holding .threadmind/, for clients that start servers outside your project
THREADMIND_AUTHORシークレットAuthor ID used for team-mode ownership (defaults to one derived from your git identity)

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

パッケージ
npmthread-mind-mcp0.5.0

ツール

14

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

パラメーター型必須説明
modeenumいいえプロジェクトモード:solo(デフォルト)または teamsolo | team
titlestringはいプロジェクトタイトル
systemContextstringいいえこのプロジェクトのシステムコンテキストまたは指示

詳細

ThreadMind MCP

npm バージョン ライセンス: MIT

AI のためのメモリのブランチ:スレッドの要約をツリー状にまとめた、Git と相性のよい仕組みです。

ThreadMind は、AI コーディングセッションにメモリを提供する Model Context Protocol (MCP) サーバーです。各スレッドには、あるトピックについて決定した内容を短くまとめた要約が含まれ、リポジトリ内に Markdown として保存されます。新しいセッションを開始すると、アクティブなスレッドのコンテキスト(そのスレッドと祖先の決定事項)が、数万トークンに膨れ上がった会話履歴に取って代わります。

ドキュメント | npm | GitHub


ThreadMind を使う理由

AI コーディングアシスタントとの会話は長くなり、クライアントが履歴を圧縮するか、最初からやり直すまで、すべてのリクエストに会話履歴全体が含まれます。やり直すと、決定した内容が失われます。ThreadMind は重要な内容を保持します。

  • セクションごとの要約 — 決定事項、制約、状態、未解決の質問、次のステップ
  • ツリーを通じた継承 — スレッドのコンテキストは、その要約と祖先の決定事項・制約から成ります。兄弟ブランチの内容は含まれません
  • 分岐による検討 — 別々のスレッドでアプローチを試し、最良のアプローチの結論を親スレッドにマージし、あるアプローチを断念した理由も残せます
  • Git を認識 — フィーチャーブランチで作成したスレッドは、そのブランチに切り替えるとアクティブになり、そのスレッドが説明するコードに変更がある場合は要約で警告します
  • チームでの共同作業 — スレッドファイルはコードと一緒にコミットされ、プルリクエストでレビューできます
節約できる理由

ThreadMind は進行中の会話を短くできません。何を送信するかはクライアントが決めます。節約できるのは、最初からやり直すときです。

Before /clear:   the conversation carries ~48,000 tokens of history
After /clear:    the session starts with the thread's context, ~1,100 tokens

main
├── auth
│   └── auth-ui ← active     context = main + auth (decisions, constraints) + auth-ui
└── dashboard                 dashboard stays out

Claude Code プラグインを使うと、/clear の実行後や会話の圧縮後にコンテキストが自動的に再読み込みされます。また、stats_show で自分のセッションにおける両方のサイズを測定できます。


クイックスタート

Claude Code プラグイン(推奨)
/plugin marketplace add mahmoud-nb/thread-mind-mcp
/plugin install thread-mind@thread-mind

プラグインはサーバーをインストールし、次のフックを追加します。

  • 起動時、/clear の実行後、会話の圧縮後にアクティブなスレッドのコンテキストを読み込む(ThreadMind プロジェクトのないリポジトリでは何も起こりません)
  • 会話が長くなるにつれて、またコンテキストウィンドウがほぼいっぱいになったときに、要約を保存するよう Claude に促す
  • 保存前に圧縮が行われた場合は要約を復元し、/clear によって未保存の作業が失われたことを通知する
  • Git ブランチの変更を追跡し、新しいアクティブスレッドのコンテキストを Claude に渡す
  • Claude が編集したファイルを次の要約に記録し、ファイルに変更があったときに警告を表示する
  • tm:tree と tm:stats にトークンを使わず即座に応答する
  • 会話がどれほど大きくなるかをトランスクリプトから読み取って測定し、stats_show で表示する

さらに、コマンド(/thread-mind:context、/thread-mind:tree、/thread-mind:create、/thread-mind:switch、/thread-mind:summary、/thread-mind:merge、/thread-mind:stats)と /config のオプションも追加されます。ステータス行(thread-mind-mcp status-line)には、アクティブなスレッドと未保存の作業が表示されます。プラグインガイドを参照してください。

以前に ThreadMind を手動で設定している場合は、Claude Code がサーバーを二重に起動しないよう、その設定を削除してください。

インストール

インストールは不要です。npx で直接実行できます。

npx thread-mind-mcp

または、グローバルにインストールします。

npm install -g thread-mind-mcp
Claude Code で設定する(プラグインなし)

プロジェクトのルートから実行します。サーバーをチームと共有するには、プロジェクトスコープで追加します。Claude Code はプロジェクトのルートに .mcp.json を作成するので、これをコミットします。

# macOS / Linux
claude mcp add --scope project thread-mind -- npx -y thread-mind-mcp

# Windows: npx is a .cmd script, wrap it in cmd /c
claude mcp add --scope project thread-mind -- cmd /c npx -y thread-mind-mcp

作成される .mcp.json(手動で作成することもできます):

{
  "mcpServers": {
    "thread-mind": {
      "command": "npx",
      "args": ["-y", "thread-mind-mcp"]
    }
  }
}

Windows では、"command": "cmd" と "args": ["/c", "npx", "-y", "thread-mind-mcp"] を使用します。各チームメンバーは、Claude Code がリポジトリ内で初めてサーバーを起動するときに、そのサーバーを承認します。

自分だけで使う場合は、--scope project を省略します(デフォルトの local スコープ:このプロジェクト内の自分のみ)。または、--scope user を使用します(すべてのプロジェクトで自分のみ)。どちらも ~/.claude.json に保存され、Claude Code によって管理されます。

スコープ保存先適用対象
local(デフォルト)~/.claude.json の現在のプロジェクト内このプロジェクト内の自分
projectプロジェクトのルートにある .mcp.jsonリポジトリをクローンするすべての人
user~/.claude.jsonすべてのプロジェクトで自分

Claude Code は ~/.claude/settings.json または .claude/settings.json から MCP サーバーを読み込みません。claude mcp list またはセッション内の /mcp で設定を確認してください。

Windows + Volta: Claude Code が Volta の npx シムを解決できない場合は、volta run に処理を委ねます。

claude mcp add --scope project thread-mind -- cmd /c volta run npx -y thread-mind-mcp
その他の MCP クライアントで設定する

ThreadMind は stdio トランスポートを使用しており、あらゆる MCP クライアントと互換性があります。コマンドは常に npx -y thread-mind-mcp です。クライアントごとに異なるのは、その設定場所と、サーバーが送信する使用方法の説明を読み取るかどうかです。

クライアントサーバーの設定使用方法の説明
Cursor.cursor/mcp.json または ~/.cursor/mcp.jsonAGENTS.md
VS Code(GitHub Copilot).vscode/mcp.json(servers キー)または .mcp.jsonサーバーから送信
GitHub Copilot CLI.mcp.json または copilot mcp add thread-mind -- npx -y thread-mind-mcpAGENTS.md
Codexcodex mcp add thread-mind -- npx -y thread-mind-mcp(~/.codex/config.toml)サーバーから送信
Gemini CLI.gemini/settings.json または ~/.gemini/settings.jsonサーバーから送信
Windsurf(Devin Desktop)mcp_config.jsonAGENTS.md
Claude Desktop(チャット)THREADMIND_ROOT をプロジェクトに設定した claude_desktop_config.json必要に応じて Claude プロジェクトの指示

Claude Code、VS Code、Copilot CLI は、リポジトリのルートにある .mcp.json ファイルを共有します。各クライアントの設定については、その他の AI クライアントを参照してください。

ワークスペースの場所

ThreadMind は、次の順序で特定されるワークスペースのルートにある .threadmind/ にデータを保存します。

  1. THREADMIND_ROOT 環境変数が設定されている場合は、その値
  2. MCP クライアントが通知するワークスペースのルート(すでに .threadmind/ を含むルートが優先されます)。Claude Code は、起動したディレクトリと --add-dir で追加したディレクトリを通知します。プロジェクトのルートから起動してください
  3. サーバーを起動したディレクトリ

プロジェクト外でサーバーを起動し、ルートを通知しないクライアント(たとえば、プロジェクトフォルダーのないデスクトップチャットアプリ)では、THREADMIND_ROOT が必要です。

{
  "mcpServers": {
    "thread-mind": {
      "command": "npx",
      "args": ["-y", "thread-mind-mcp"],
      "env": { "THREADMIND_ROOT": "/path/to/your/project" }
    }
  }
}
AI クライアントに ThreadMind の使い方を教える

クライアントが接続すると、サーバーは使用方法の説明(MCP サーバーの指示)を送信します。Claude Code、VS Code(GitHub Copilot)、Codex、Gemini CLI では、設定ファイルは不要です。Cursor、Copilot CLI、Windsurf など、これらの説明を読み取らないエージェントの場合は、threadmind_init を実行して AGENTS.md ファイルを生成してください。


仕組み

コアコンセプト
概念説明
Projectスレッドツリーを含むワークスペースです。タイトル、システムコンテキスト、モード(solo/team)を持ちます。
Threadツリー内のノードで、議論のトピックを表します。Markdown形式の要約を保存し、Gitブランチにリンクしたり、完了または放棄したりできます。
Summaryスレッドで決定した内容で、次のセクションで構成されます:決定事項、制約事項、状態、未解決の質問、次のステップ。
Contextアクティブなスレッドの要約と、その祖先の決定事項および制約事項です。AI が読み込む内容です。
Session各クライアントセッションには独自のアクティブなスレッドがあり、新しいセッションはチェックアウト済みの Git ブランチから開始します。
ストレージ

ThreadMind は、プロジェクトルートの .threadmind/ ディレクトリにすべてを保存します。

.threadmind/
  config.json              # Local state: where sessions start, author ID, session measurements
  .gitignore               # Excludes config.json from git
  projects/
    my-app.json            # Project configuration
  threads/
    my-app/
      main.md              # Root thread (markdown + YAML frontmatter)
      auth-system.md       # Child thread
      auth-api.md          # Grandchild thread

スレッドファイルでは YAML フロントマターを使用します。各ファイルに親が記録されており、ファイルからツリーが再構築されるため、同期を維持したり Git で競合したりするインデックスはありません。

---
id: auth-system
title: Authentication System
parentId: main
author: mahmoud-a3f9
createdAt: 2026-04-15T10:00:00.000Z
updatedAt: 2026-04-15T12:30:00.000Z
branch: feature/auth
commit: 3f2a9c1e5b7d4a8f0c6e2b1d9a7f5c3e1b0d8a6f
paths: ["src/auth"]
---

## Decisions
- JWT with refresh tokens, stored in httpOnly cookies
- Passport.js over custom middleware, for maintainability

## State
- Login and refresh done, logout pending

status、branch、commit、paths、mergedInto は、設定されている場合にのみ表示されます。

コンテキストの構築

コンテキストをリクエストすると、ThreadMind はアクティブなスレッドからルートまでたどります。アクティブなスレッドの要約全体を保持し、祖先については 決定事項 と 制約事項 のみを含めます。

## System Context
You are building a Next.js e-commerce application...

---

## Thread: My App

## Decisions
- Next.js 15, PostgreSQL, Stripe

---

## Thread: Authentication System

## Decisions
- JWT with refresh tokens, bcrypt, Passport.js

---

## Thread: Auth API Endpoints (active)

_⚠ 2 commits changed src/api since this summary was written: check it is still accurate._

## Decisions
- POST /auth/login, POST /auth/register, POST /auth/refresh

## Next steps
- Rate limiting on /auth/login

---
_ThreadMind context: ~160 tokens | depth: 3 threads_
  • 直接の祖先チェーン のみが含まれます。兄弟ブランチは除外されます
  • コード変更前に書かれた要約には、その要約とともに記録されたコミットと paths を使用してフラグが付けられます
  • コンテキストが大きくなりすぎる場合、maxTokens は最も遠い祖先から順に除外します

利用可能なツール

各ツールはタイトルと MCP アノテーション(読み取り専用、破壊的、冪等)を宣言します。クライアントはこれらを使用して、確認を求めるタイミングを判断できます。

プロジェクト管理
ツール説明
project_createルートの「main」スレッドを含む新しいプロジェクトを作成します
project_listすべてのプロジェクトを一覧表示します(セッションのプロジェクトを表示します)
project_switchセッションを別のプロジェクトに切り替えます(プロジェクトが1つの場合は自動的に選択されます)
project_create
パラメーター型必須説明
titlestringはいプロジェクトのタイトル(ID の生成に使用)
systemContextstringいいえシステムプロンプトまたは全体に適用される指示
mode"solo" | "team"いいえプロジェクトのモード(デフォルト:"solo")
スレッド管理
ツール説明
thread_create子スレッドを作成します。フィーチャーブランチ上では、そのブランチにリンクします
thread_switchこのセッションを別のスレッドに切り替え、構築済みのコンテキストを返します
thread_listステータスとリンクされたブランチを含むスレッドツリーを表示します
thread_statusスレッドを完了または放棄としてマークします(理由は決定事項に保持されます)。または再開します
thread_merge完了したスレッドを親に統合します。親の要約を置き換え、スレッドを完了としてマークします
thread_deleteスレッドとそのすべての子孫を削除します
thread_rebaseスレッドを別の親に移動します(git rebase のように)
thread_create
パラメーター型必須説明
titlestringはいスレッドのタイトル(ID の生成に使用)
parentIdstringいいえ親スレッドの ID(デフォルトはアクティブなスレッド)
thread_status
パラメーター型必須説明
status"active" | "done" | "abandoned"はい新しいステータス
threadIdstringいいえ対象のスレッド(デフォルトはアクティブなスレッド)
reasonstringいいえ理由。スレッドの「決定事項」セクションに追加されます
thread_merge
パラメーター型必須説明
parentSummarystringはいスレッドの結論を含む、親の新しい要約
threadIdstringいいえ統合するスレッド(デフォルトはアクティブなスレッド)
thread_delete
パラメーター型必須説明
threadIdstringはい削除するスレッド ID(子孫にも連鎖して適用されます)
thread_rebase
パラメーター型必須説明
threadIdstringはい移動するスレッド ID
newParentIdstringはい新しい親スレッド ID
要約とコンテキスト
ツール説明
summary_updateスレッド、またはそのセクションの要約を更新します
context_getトークン数の見積もりとともに、組み立てられたコンテキストを取得します
summary_update
パラメーター型必須説明
contentstringはい新しい要約、または section に追加するテキスト(マークダウン)
threadIdstringいいえ対象のスレッド(デフォルトはアクティブなスレッド)
sectionstringいいえdecisions、constraints、state、open-questions、next-steps のいずれか。指定したセクションのみを更新します
replaceSectionbooleanいいえセクションに追加する代わりに置き換えます
pathsstring[]いいえスレッドに関連するファイルまたはディレクトリ。変更時に要約へフラグを付けます
context_get
パラメーター型必須説明
maxTokensnumberいいえトークン上限。最も遠い祖先から順に除外されます(thread_switch でも指定できます)
セットアップ
ツール説明
threadmind_initMCP サーバーの指示を読み取らないエージェント向けの指示ファイルを生成します(AGENTS.md など)
threadmind_init
パラメーター型必須説明
clientsstring[]いいえ生成するファイル:"agents"、"claude"、"cursor"、"generic"(デフォルト:agents と generic)

サーバーが MCP クライアントに送信する指示と同じ内容を書き込みます。

対象ファイル読み取るもの
agentsAGENTS.mdCodex、Cursor、GitHub Copilot、その他のエージェント
claudeCLAUDE.mdClaude Code — サーバーの指示を受け取るため不要です
cursor.cursor/rules/threadmind.mdcAGENTS.md の代わりに、常時適用されるプロジェクトルールとして Cursor が読み取ります(Cursor は両方を読み取ります)
generic.threadmind/instructions.md任意のクライアントのカスタム指示に貼り付けます

以前のバージョンでは CLAUDE.md と .cursorrules を書き込んでいました。threadmind_init は Cursor ルールの生成時に .cursorrules から ThreadMind セクションを移動し、いずれかのファイルに残ったセクションがあれば報告します。

統計
ツール説明
stats_show要約のサイズと、Claude Code プラグインがある場合は計測された会話サイズを表示します

プラグインを使用すると、各セッションで会話が到達したサイズ(Claude Code のトランスクリプトから読み取ります)と、次のセッション開始時に読み込まれたコンテキストが記録されます。stats_show はその両方を報告します。

Measured sessions (Claude Code plugin):
  Conversation size when sessions ended: ~48,200 tokens on average, ~96,000 at most (12 sessions)
  ThreadMind context loaded at session start: ~1,150 tokens on average (14 sessions)

利用可能なリソース

リソースURI説明
現在のコンテキストthreadmind://contextアクティブなスレッドの組み立て済みコンテキスト
スレッドツリーthreadmind://treeスレッドツリーの ASCII 表示
スレッドの要約threadmind://thread/{threadId}祖先を含まない、1 つのスレッドの要約

アクティブなプロジェクトのすべてのスレッドがリソースとして一覧表示されます。Claude Code では、@ を入力してスレッドを指定すると、兄弟スレッドの要約を会話に取り込めます。


利用可能なプロンプト

プロンプト説明
tm-help利用可能なすべての ThreadMind コマンドを表示します
tm-contextアクティブなスレッドのコンテキストを会話に読み込みます
tm-treeスレッドツリーを表示します
tm-stats統計情報を表示します
tm-create新しいスレッドを作成します(thread_create 経由)
tm-switchスレッドを切り替えます(thread_switch 経由)
tm-rebaseスレッドを別の親に移動します(thread_rebase 経由)
tm-summary指定された要約を保存するか、AI に作成させます(summary_update 経由)
tm-init指示ファイルを生成します(threadmind_init 経由)
start-threadtm-context と同じです。互換性のために残されています
summarize-thread内容を指定しない tm-summary と同じです。互換性のために残されています

tm-context、tm-tree、tm-stats は、ツール呼び出しを行わずに結果を直接埋め込みます。他のプロンプトは、対応するツールを呼び出すよう AI に求めるため、変更にはクライアントの確認設定が引き続き適用されます。スレッド ID の引数は自動補完に対応しています。

Claude Code では、これらはスラッシュコマンドとして表示されます:/mcp__thread-mind__tm-help、/mcp__thread-mind__tm-create など。

クイックショートカット

サーバーの指示により、チャットに直接入力できる短いテキストコマンドを AI に教えます。

コマンドアクション
tm:help利用可能なすべてのコマンドを表示します
tm:context組み立てられたコンテキストを読み込みます
tm:treeスレッドツリーを表示します
tm:create <title>新しいスレッドを作成します
tm:switch <id>スレッドを切り替えます
tm:summary要約を書いて保存します
tm:summary <content>指定した要約の内容を保存します
tm:mergeスレッドを親に統合します
tm:done [reason]スレッドを完了としてマークします
tm:abandon <reason>スレッドを放棄としてマークします
tm:stats統計情報を表示します
tm:delete <id>スレッドを削除します
tm:rebase <id> <newParentId>スレッドを別の親に移動します
tm:init指示ファイルを生成します
tm:project <title>新しいプロジェクトを作成します
tm:projectsすべてのプロジェクトを一覧表示します

使用例

1. 新しいプロジェクトを開始する
You: Create a new ThreadMind project called "E-Commerce App" with system context
     "Building a Next.js e-commerce platform with Stripe payments"

AI: [calls project_create] → Project "e-commerce-app" created. Main thread active.

Claude Code では、それ以上のセットアップは必要ありません。他のエージェント(Codex、Cursor、Copilot…)でもプロジェクトを使えるようにするには、threadmind_init を実行するよう依頼します。これにより AGENTS.md ファイルが生成されます。

2. 作業して要約する
You: [discuss the architecture with AI...]
You: tm:summary

AI: [writes the summary in sections, then calls summary_update]
     ## Decisions
     - Next.js 15 App Router, PostgreSQL with Prisma, Stripe Checkout
     ## Next steps
     - Authentication

You: We'll use Stripe webhooks for order confirmation, record it.

AI: [calls summary_update with section "decisions"] → Section "decisions" updated.
3. Git ブランチ上でサブトピックに分岐する
$ git switch -c feature/payments

You: tm:create Payment Integration

AI: [calls thread_create] → Thread "payment-integration" created under "main".
     Linked to git branch "feature/payments".

     main
     └── payment-integration [branch: feature/payments] ← active
4. 会話が長くなったら新しく始める
You: tm:summary
You: /clear

(the plugin loads the context of payment-integration: main's decisions
 and constraints, then the whole payment-integration summary)

プラグインを使わない場合は、新しいセッションで tm:context を依頼します。

5. スレッドを終了する
You: tm:merge

AI: [writes main's new summary with the payment decisions, calls thread_merge]
     → Thread "payment-integration" merged into "main", which is now the active thread.

     main ← active
     └── payment-integration [done] [branch: feature/payments]

チームモード

チームモードでは、Git を介して共有するスレッドツリーで共同作業できます。

仕組み
  1. チームモードでプロジェクトを作成します:

    project_create with title "Shared Project" and mode "team"
    
  2. 各チームメンバーには、初回の書き込み時に作成者 ID が割り当てられます。これは git config user.name と git config user.email の短いハッシュから生成されます(クローン間で安定しています。THREADMIND_AUTHOR 環境変数で上書きできます)

  3. スレッドファイル(.threadmind/threads/)は Git で追跡されます。各ファイルには親が記録されるため、同じ親の下でも、2 人がスレッドを作成して競合することはありません

  4. ローカル設定(.threadmind/config.json)は Git の追跡対象外です。各メンバーは独自のセッション状態と測定値を持ちます

  5. あなたのフィーチャーブランチをチェックアウトしたチームメイトは、そのブランチに関連付けられたスレッドから開始します

ルール
アクション自分のスレッドチームメイトのスレッド
要約を読むはいはい
要約を更新する、ステータスを変更するはいいいえ
親に統合する親も自分が所有している場合いいえ
削除する子孫スレッドがチームメイトのものでない場合は可能いいえ
子スレッドを作成するはいはい
切り替えるはいはい

所有権は誤った編集を防ぐためのものであり、アクセス制御ではありません。

0.4 からのアップグレード: 以前はツリーが .threadmind/trees/ に保存されていました。ThreadMind は初回使用時にツリーをスレッドファイルに移動し、trees/<project>.json を削除します。この変更をコミットし、チーム全体で一緒にアップグレードしてください。.threadmind/stats/ は使用されなくなったため、削除できます。

ワークフロー
# Pull teammates' threads
git pull

# View the full tree (includes everyone's threads)
# → Use thread_list

# Branch from a teammate's thread
# → Use thread_create with parentId set to their thread

# Push your new threads
git add .threadmind/
git commit -m "Add payment-integration thread"
git push

開発と公開

開発環境のセットアップ、テスト、リリース、および MCP Registry への公開については、SETUP.md をご覧ください。


アーキテクチャ

src/
  index.ts              # Entry point — stdio server, `hook <event>` or `status-line` for Claude Code
  server.ts             # McpServer factory (tools + resources + prompts + instructions)
  services.ts           # Services over one .threadmind directory, shared by server and hooks
  types/
    index.ts            # All TypeScript interfaces
  core/
    frontmatter.ts      # YAML frontmatter parser/serializer (zero deps)
    ids.ts              # ID validation, slugification, title normalization
    lock.ts             # Cross-process lock file
    clock.ts            # Strictly increasing timestamps
    storage.ts          # File I/O with atomic writes; tree derived from thread files
    workspace.ts        # Workspace root resolution (env, client roots, cwd)
    session.ts          # Active thread per session, per git branch
    git.ts              # Current branch, commits since a summary
    summary.ts          # Summary sections: inheritance, section updates
    project.ts          # Project lifecycle management
    thread.ts           # Thread CRUD, status, merge, tree rendering
    context.ts          # Context assembly, outdated summary notes, token budget
    instructions.ts     # Server instructions and instruction files
    stats.ts            # Session measurements and statistics report
  hooks/
    index.ts            # SessionStart / SessionEnd command hooks of the Claude Code plugin
    guard.ts            # Session hooks: reminders, compaction, branch changes, edited files
    session-context.ts  # Context injected by hooks, sized to Claude Code's limit
    transcript.ts       # Conversation sizes read from Claude Code transcripts
    settings.ts         # Hook options, from the server's environment
    session-cache.ts    # State shared between the hooks and the status line
    status-line.ts      # Claude Code status line
  tools/
    index.ts            # 14 MCP tools with Zod schemas and annotations
    hook.ts             # threadmind_hook, called by the plugin's hooks
  resources/
    index.ts            # 2 MCP resources + the thread resource template
  prompts/
    index.ts            # 11 MCP prompts
plugin/                 # Claude Code plugin (manifest, .mcp.json, hooks, commands)
.claude-plugin/         # Marketplace listing the plugin
server.json             # MCP Registry metadata
設計上の決定
  • SQLite ではなくファイルベースのストレージ — Git との親和性が高く、人間が読みやすく、ネイティブ依存関係がありません
  • スレッドファイルを唯一の信頼できる情報源にする — 各ファイルに親を記録するため、乖離したり Git で競合したりするツリーインデックスが不要です
  • YAML フロントマター — スレッドのメタデータと内容を単一の .md ファイルにまとめ、人間にもツールにも読みやすくします
  • 外部 YAML パーサーを使わない — シンプルなフラット形式のフロントマター向けに、最小限の手書きパーサーを使用します
  • アトミックな書き込み — 一時ファイルに書き込んでフラッシュした後、対象ファイルと置き換えるため、クラッシュしてもファイルが不完全な状態で残りません
  • 更新をシリアル化 — ロックファイルを介して、セッションやフックをまたぐ読み取り・変更・書き込み操作を一度に一つずつ実行します
  • スラッグ化された ID — タイトルからスレッド ID を生成します("Auth System" → "auth-system")。自動サフィックスにより衝突を防ぎ、a-z、0-9、- のみに制限することで、パストラバーサルも防ぎます
  • セッションごとにアクティブなスレッドは一つ — セッション同士が互いに移動することはなく、新しいセッションはチェックアウト済みの Git ブランチから開始します
  • 選択的な継承 — 祖先から引き継ぐのは決定事項と制約であり、状態や次のステップではありません
  • MCP プロンプト — スラッシュコマンドです。読み取り専用のものはツール呼び出しを求める代わりに、結果を埋め込みます
  • サーバーの指示 — サーバーがクライアントに使い方を伝えるため、指示ファイルは不要です。threadmind_init は同じテキストを AGENTS.md や、指示ファイルを読み取らないエージェント向けの他のファイルに書き込みます
  • ワークスペースの解決 — THREADMIND_ROOT、次にクライアントのルート、最後に作業ディレクトリの順で使用します
  • 節約量は推定ではなく測定 — 会話のサイズは Claude Code のトランスクリプトから取得し、コンテキストのサイズは推定値です(トークンあたり約 3.5 文字)

必要条件

  • Node.js >= 18.0.0
  • Git(任意:チームモードでの作成者検出、スレッドとブランチの関連付け、要約が古くなった場合の警告)

ライセンス

MIT

コメント

MCP は初めてですか?

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

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