Personal Brain について
Personal Brainは、LinkedInのつながりをFalkorDBのグラフに取り込み、エージェントが検索や面会記録に使えるMCPサーバーです。オフライン対応の2D・3Dネットワークビューアーも備えています。
主な機能
- 01LinkedInデータからグラフを構築
- 02面会、メモ、フォローアップを記録
- 03名前やトピックで連絡先を検索
- 04読み取り専用のCypherクエリを実行
- 05オフラインで2D・3D表示
活用シーン
- 01紹介を頼める人を探す
- 02イベントで会った人や話題を思い出す
- 03面会を記録して次の対応を管理
MCP 対応
MCPクライアントにremember、find、askツールを提供し、面会記録の保存、ネットワーク検索、制限付きの読み取り専用Cypherクエリに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx personal-brainFALKORDB_URLシークレットYour FalkorDB Cloud URL. Leave it empty to use local FalkorDB on localhost:6379.PB_GRAPHThe name of the graph. The default is network.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
3掲載時のツール一覧 · 4 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| on | string | いいえ | |
| due | string | いいえ | |
| name | string | いいえ | |
| note | string | いいえ | |
| string | いいえ | ||
| event | string | いいえ | |
| title | string | いいえ | |
| company | string | いいえ | |
| location | string | いいえ | |
| follow_up | string | いいえ | |
| new_event | boolean | いいえ | |
| person_id | string | いいえ | |
| ended_jobs | any | いいえ | |
| new_person | boolean | いいえ | |
| follow_up_done | string | いいえ |
詳細
Personal Brain
AI エージェントに、あなたの仕事上のつながりを記憶させる MCP サーバーです。
Personal Brain は、LinkedIn のつながりを FalkorDB のグラフに読み込みます。Claude Code やその他の MCP クライアントから、知り合いを調べたり、誰が誰を紹介できるかを探したり、会った人を記憶したりできます。3D ビューアーでは、グラフを銀河のように表示します。
claude mcp add personal-brain -- uvx personal-brain mcp
このコマンドを使うには、ネットワークのデータが入ったデータベースが必要です。クイックスタートをご覧ください。
ライブデモを試す。デモ内のつながりはすべて架空のもので、会社名やイベント名もサンプルです。
イベントに参加するたびに人と出会います。2週間もすれば、その人が誰だったか、何に取り組んでいるか、誰が誰を紹介できるかを忘れてしまいます。これからは、エージェントがあなたに代わって記憶します。エージェントは何も削除できません。削除できるのはあなただけです。personal-brain forget を使ってください。
すべての処理はあなたのノートパソコン上で動作します。
クイックスタート:5分でサンプルネットワークを作成
uv と FalkorDB が必要です。uvx が適切な Python をダウンロードします。
架空のサンプルネットワークには、実際の LinkedIn エクスポートと同じファイル形式で、創作した人物、スタートアップ、イベントが241件含まれています。自分のデータをダウンロードする前に、すべての機能を試せます。
1. FalkorDB を起動します。 Docker で実行するか、FalkorDB Cloudをご覧ください。
docker run -p 6379:6379 -p 3000:3000 -v falkordb_data:/var/lib/falkordb/data -it --rm falkordb/falkordb:v4.22.2
2. サンプルを読み込み、サーバーを Claude Code に追加します。
uvx personal-brain load --sample
claude mcp add personal-brain -- uvx personal-brain mcp
次のように試してみてください。
- 「ネットワーク内で Kestrel Graph に勤めているのは誰ですか?」
- 「エージェントのメモリについて、誰と話しましたか?」
- 「資金調達が十分なスタートアップの人を紹介してくれそうなのは誰ですか?」
- 「Graph & RAG Meetup で Oskar Mensah に会いました。彼はエージェントのメモリを開発しています。」(Oskar Mensah は2人いるため、どちらかを尋ねられます。)
その他の MCP クライアント: サーバーは stdio 経由で動作します。ほとんどのクライアントでは、次の設定を使用します。
{
"mcpServers": {
"personal-brain": { "command": "uvx", "args": ["personal-brain", "mcp"] }
}
}
FalkorDB Cloud
無料の FalkorDB Cloud インスタンスは Docker なしで利用できます。URL をサーバーに渡し、load と export に --cloud を追加します。
export FALKORDB_URL='falkors://user:password@host:port'
uvx personal-brain load --sample --cloud
claude mcp add personal-brain -e FALKORDB_URL="$FALKORDB_URL" -- uvx personal-brain mcp
または、FALKORDB_URL=... を ~/.personal-brain/.env に設定します。
MCP ツール
uvx personal-brain mcp を実行すると、エージェントは1つのグラフ上で3つのツールを利用できます。
| ツール | 機能 |
|---|---|
remember | 会った人、勤務先、会った場所、役職、都市、メールアドレスを保存します。事実を訂正する場合は、その旨を伝えてください。古い値が置き換えられます。会社名やイベント名が、既知のものと1文字違いの場合は何も保存せず、エージェントが確認します。フォローアップも管理します。「金曜日までにJonasに資料を送るようリマインドして」と伝えると、完了したと伝えるまで未完了のままです。「Kestrel」と「Kestrel Inc.」は同じ会社として扱われ、イベント名のタイプミスでも同じイベントが見つかります。名前をグラフ内の既存の人物と照合します。対象の人物を特定できない場合は、何も保存せず確認します。新しい会社を登録すると、以前の仕事が終了し、職歴に残ります。その人に現在の仕事が複数ある場合は、どれが終了したのか確認します。新しい仕事がなく、誰かが仕事を辞めたことも記録します。同じ呼び出しを2回行っても、会合は1件だけ保存されます。今日ではない場合は、会った日を伝えてください。 |
find | 人物、会社、イベントを名前で検索します。どの文字体系でも、タイプミスやアクセント記号の欠落があっても見つけます。about を指定すると、メモ内の言葉、トピック、スキル、見出しをもとに人物を検索します。たとえば「エージェントのメモリーについて話したのは誰?」のように尋ねると、一致した理由も示します。 |
ask | 読み取り専用の Cypher クエリを実行します(FalkorDB は書き込みを拒否します)。制限時間は5秒、結果は最大50行、最大40,000文字です。データをインターネットに送信する可能性がある LOAD CSV は拒否します。ツールの説明にはスキーマが含まれています。 |
どのツールも削除は行わないため、LinkedIn の見出しに隠されたテキストによってエージェントが何かを削除することはありません。ただし、エージェントが偽のメモを保存する可能性はあります。そのため、各ツールではそのようなテキストをデータとして扱うようエージェントに指示しています。また、personal-brain notes を実行すると、保存された内容を新しい順に確認できます。どのような指示でも、これを完全に防ぐことはできません。削除するには、自分でコマンドを実行してください。--yes を追加しない限り、実行前に確認を求めます。ビューアーのファイルがある場合は、それらも更新されます。
uvx personal-brain forget note <id> # one note and everything it added. remember's reply gives this command
uvx personal-brain forget person "Name" # a person and every note about them. They stay out of future rebuilds
uvx personal-brain forget all-notes # every note and everything they added, to clear a live demo
書き込み内容はすべて Note ノードにひも付けられるため、各事実がどのメモに基づいているかを追跡できます。新しい LinkedIn エクスポートを使って personal-brain load を再実行しても、メモとメモから追加された内容は保持されます。新しいインポートに同じ事実が含まれている場合は、インポート内容が優先されます。また、保存した人物がインポートにも含まれている場合は、1人の人物として統合されます。--force を指定すると、メモが削除されます。load --sample は実際のネットワークを置き換える前に確認を求め、--yes を指定すると確認を省略します。PB_GRAPH でグラフを選択します(デフォルトは network です)。FalkorDB が起動していなくてもサーバーは起動し、各ツールが起動方法を案内します。macOS と Linux で動作します。Windows はサポートされていません。
新しい LinkedIn エクスポートを読み込むたびに、変更点も通知されます。personal-brain load は前回の読み込み以降に転職した人を表示し、エージェントに後から尋ねることもできます。エクスポートにメッセージの日付が含まれている場合、エージェントは「連絡が途絶えたのは誰?」という質問に答えられます。読み取るのは日付だけで、メッセージの内容は読み取りません。personal-brain followups を実行すると、未完了のタスクが一覧表示されます。
3D ビューアー
personal-brain export を実行し、続けて personal-brain view を実行して、http://127.0.0.1:8765 を開きます。three.js が含まれているため、オフラインで動作します。
- WebGL でネットワーク全体を銀河として表示します(19k ノード、117k エッジでテスト済み)。2D/3D を切り替えられます。
- タイムラプス:イベントが次々と表示されるなか、つながりが一つずつ増えていく様子を確認できます。
- グラフに質問:質問が自動で入力され、続いて Cypher クエリが表示され、最後に経路に沿って光が走り、回答が強調表示されます。質問例:
- 過去1年間のイベントで会った創業者は誰ですか?
- 私のネットワークで大手テック企業に勤めている人は誰ですか?
- 資金調達が順調なスタートアップの人を紹介してくれそうなのは誰ですか?
- AI イベントを開催しているスタートアップはどこで、そこに知り合いはいますか?
- エージェントとメモリーに関するポッドキャストに招待すべき人は誰ですか?
- 知り合いを通じて登壇できる、今後のエージェント関連イベントはどれですか?
- 記憶する:「AI Engineer Summit で Supabase の Maya に会った。開発者向けイベントを運営している」と入力すると、FalkorDB にリアルタイムで書き込まれ、銀河に表示されます。
- ライブビュー:エージェントの作業中に
personal-brain viewを開いたままにします。エージェントが調べたり保存したりした人が、銀河で光ります。 - デモモード:デモ全体をハンズフリーで実行します(
Dを押してください)。
仕組み
LinkedIn data export ──┐
├─> load_graph.py ──> FalkorDB ──┬─> mcp_server.py ──> your agent
data/enriched/ ────────┘ (graph "network") ├─> export_graph.py ──> layout_graph.py ──> viewer
(optional) ├─> export_stories.py ──> viewer
└─> server.py (live "Remember" API) ──> viewer
- LinkedIn のエクスポートデータには、つながり(つながった日付を含む)、メッセージ(本文は使わず、件数のみを使用)、投稿、職歴、学歴が含まれます。
data/enriched/の任意ファイルを使うと、各つながりの詳しい職歴、学歴、スキル、企業の資金調達状況、今後のイベントを追加できます。これらのファイルにはsample_data/enriched/の JSON 形式を使用します。このリポジトリにはデータを収集するツールはありませんが、これらのファイルがなくてもすべて動作します。- load_graph.py はグラフを構築し、以下を推定します。
- 同じ企業で働いた、または同じ学校に同時期に3か月以上在籍した2人のつながり(大規模校では、同じ入学年の場合のみ)、職歴がない場合に現在同じ企業で働いている人同士、または同じグループチャットに参加している人同士を、
KNOWSでつなぎます。 Eventノード:5人以上のつながりを追加した日は、イベントだった可能性があります。my_brain.jsonで名前を付けてください。- 見出しやスキルから、興味のある
Topic(AI エージェント、エージェントメモリー、ナレッジグラフ、創業者、投資家、ポッドキャストなど)を抽出します。 - 拡張ファイルがある場合のみ:
- 職種名と説明から、テクノロジーごとの経験年数を算出します。
well_fundedスタートアップ:非公開企業で、事業を継続中、従業員数が最大5,000人で、シリーズラウンドを実施済み、または投資家が8人以上の企業です。- 各プロフィールの所在地から、都市圏レベルで
Cityを判定します(「Berlin Metropolitan Area」と「Berlin」は同じ都市、「Palo Alto」と「San Jose」は「SF Bay Area」です)。 - 今後の各イベントの主催者:あなたのつながり(LinkedIn で一致)である主催者、または知り合いがいる企業(主催者がその企業、主催者がその企業で働いている、あるいはタイトルに「Notion x Clover」のように企業名が含まれる場合)です。
- 同じ企業で働いた、または同じ学校に同時期に3か月以上在籍した2人のつながり(大規模校では、同じ入学年の場合のみ)、職歴がない場合に現在同じ企業で働いている人同士、または同じグループチャットに参加している人同士を、
- export_graph.py + layout_graph.py はグラフを JSON にエクスポートし、2D レイアウト(igraph DrL)を計算します。3D では、ノードの種類ごとに別のレイヤーに配置されます。
- export_stories.py は、FalkorDB 上で「グラフに質問」の Cypher クエリを実行し、ビューアー用に回答と処理時間を保存します。
グラフのスキーマ
| ノード | エッジ |
|---|---|
Me、Person、Company、School、Skill、Topic、Event、Investor、City、Note | (Me)-[:CONNECTED]->(Person)、(Person)-[:WORKED_AT {title, start, end, current}]->(Company)、(Person)-[:STUDIED_AT]->(School)、(Person)-[:HAS_SKILL]->(Skill)、(Person)-[:HAS_EXPERIENCE {years}]->(Skill)、(Person)-[:INTO]->(Topic)、(Person)-[:KNOWS {via, place}]-(Person)、(Me)-[:ATTENDED]->(Event)、(Person)-[:MET_AT]->(Event)、(Company)-[:FUNDED_BY {lead, round}]->(Investor)、(Person)-[:LIVES_IN]->(City)、(Event {upcoming})-[:HOSTED_BY {via}]->(Person or Company)、(Event)-[:ABOUT]->(Topic)、(Event)-[:HELD_IN]->(City)、(Me)-[:MET]->(Person)、(Me)-[:WROTE]->(Note)-[:ABOUT]->(Person)(「記憶する」から) |
独自に構築する
1. LinkedIn のデータを取得します。 LinkedIn > Settings > Data privacy > Get a copy of your data。 次の 2 つから選べます。
- Connections only:通常、約 10 分で準備できます。人物、現在の勤務先と役職、つながった日付を取得できます。グラフ、イベント、エージェントツールにはこれで十分です。
- Download larger data archive:準備には約 1 日かかります。メッセージ(使用されるのは件数のみ)、投稿、職歴、学歴が追加されます。
~/.personal-brain に解凍します(フォルダー名に LinkedInDataExport が含まれます)。複数ある場合は、load が最新のものを読み込みます。personal-brain --help でデータフォルダーを確認できます。別のフォルダーを使うには、PB_HOME を設定します。
空の状態から始めることもできます。 インポートを省略します。MCP サーバーは空のグラフにあなたを作成し、あなたが会った人をエージェントに伝えるたびに、グラフが成長していきます。
任意:my_brain.example.json を ~/.personal-brain/my_brain.json にコピーすると、イベントに名前を付けたり、会社を除外したりできます。
2. グラフとビューアーデータを構築します。 FalkorDB Cloud を使う場合は、両方のコマンドに --cloud を追加します。
uvx personal-brain load
uvx personal-brain export
3. 開きます。
uvx personal-brain view
http://127.0.0.1:8765 を開きます。キー操作:2 / 3 でビューを切り替え、T でタイムラプス、B でビッグバン、D でデモ、Esc でリセットします。
代わりに FalkorDB Browser で探索する場合は、docs/demo_queries.cypher を参照してください。
コードに取り組む
Python 3.10 以降、uv、Docker が必要です。クローンでは、クローン自体がデータフォルダーとなり、Claude Code はその中のどのフォルダーからでも .mcp.json を読み込みます。
git clone https://github.com/zhang-liz/personal-brain && cd personal-brain
python3 -m venv .venv && .venv/bin/pip install -e ".[test]"
docker run -p 6379:6379 -p 3000:3000 -v falkordb_data:/var/lib/falkordb/data -it --rm falkordb/falkordb:v4.22.2
その後、別のターミナルでテストを実行します。テストでは使い捨てのグラフを使用します。
PATH="$PWD/.venv/bin:$PATH" .venv/bin/python -m pytest # everything, on local FalkorDB
.venv/bin/python tests/test_memory.py --cloud # the memory tools on FALKORDB_URL
データは自分のものです
- データはパッケージの外にある
~/.personal-brainに保管されます。このフォルダーを開けるのはあなただけです。クローンでは、エクスポートデータ、data/、.env、my_brain.jsonは.gitignoreに含まれています。絶対にコミットしないでください。 - メッセージの本文がグラフに読み込まれることはありません。各人とやり取りしたメッセージの件数と、最後のメッセージの日付のみが読み込まれます。
- データフォルダー内の
data/viewer/graph.jsonには実名が含まれています。そのファイルではなく、スクリーンショットを共有してください。 - ローカルサーバーは
127.0.0.1のみで待ち受け、data/viewer/のみを提供します。
ファイル
| パス | 内容 |
|---|---|
src/personal_brain/cli.py | personal-brain コマンド |
src/personal_brain/paths.py | データフォルダーの場所 |
src/personal_brain/load_graph.py | FalkorDB グラフと推論されたすべてのリンクを構築します |
src/personal_brain/export_graph.py | すべてのノードとエッジを data/viewer/graph.json にエクスポートします |
src/personal_brain/layout_graph.py | レイアウトを事前計算します |
src/personal_brain/export_stories.py | 「グラフに質問する」の質問とその Cypher |
src/personal_brain/server.py | ビューアーとライブ Remember API を、ビューアー自身のページにのみ提供します |
src/personal_brain/memory.py | メモリーそのものです。remember、find、ask、forget を扱います(MCP サーバー、ビューアー、forget コマンドで使用) |
src/personal_brain/mcp_server.py | Claude Code やその他のエージェント向けの MCP サーバー |
src/personal_brain/forget.py | personal-brain forget コマンド |
src/personal_brain/notes.py | personal-brain notes コマンド |
src/personal_brain/notes_backup.py | 再構築後もノートを保持します |
src/personal_brain/job_changes.py | 読み込みのたびに、転職した人を報告します |
src/personal_brain/followups.py | personal-brain followups コマンド |
src/personal_brain/activity.py | エージェントが直前に行ったことをビューアーに伝えます |
src/personal_brain/companies.py | 2つの会社名が同じ会社を指すかどうかを判定します |
.mcp.json | クローン内で MCP サーバーを起動する方法を Claude Code に伝えます |
tests/ | 使い捨てグラフを使用して、メモリーツール、MCP サーバー、ビルド済みパッケージをエンドツーエンドでテストします |
src/personal_brain/sample_data/ | 架空のサンプルネットワーク |
scripts/make_sample_data.py | sample_data/ を生成します |
src/personal_brain/viewer/index.html | WebGL ビューアー(three.js r170、MIT、同梱) |
docs/demo_queries.cypher | FalkorDB Browser に貼り付けるクエリ |
これは初期段階のプロジェクトです。テストと CI はありますが、1.0 より前にコマンドやツールが変更される可能性があります。
貢献
CONTRIBUTING.md を参照してください。セキュリティ上の問題を報告するには、SECURITY.md を参照してください。
ライセンス
MIT ライセンスです。LICENSE を参照してください。src/personal_brain/viewer/vendor/ 内の three.js も MIT ライセンスです(独自の LICENSE ファイルがあります)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
