mcpField
B
Backstory: search your data exports locally

Backstory: search your data exports locally

ローカル
github.com検索517 週間前に更新

Backstory: search your data exports locally について

Backstoryは、個人データのエクスポートをローカルで検索したい人向けのツールです。複数のソースをSQLiteのタイムラインに統合し、MCP対応のAIアシスタントからも検索できます。

主な機能

  1. 01Google、Telegram、Spotify、Instagramのデータを取り込み
  2. 02キーワードまたは意味でイベントを検索
  3. 03ソースをまたいで人物や場所を照合
  4. 04ダウンロード完了後にデータを自動取り込み
  5. 05ベンチマークで検索品質を評価

活用シーン

  1. 01複数のエクスポートから過去のメッセージや行動を検索
  2. 02位置情報とメディアの履歴をまとめて検索
  3. 03AIアシスタントからローカルの個人タイムラインを検索

MCP 対応

BackstoryはMCPサーバーを起動し、MCPクライアントにタイムライン検索、イベント取得、人物や場所の検索、期間の要約、取り込み済みソースの一覧を提供します。

設定

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

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
nugetBackstory1.1.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Backstory

すべてのデータエクスポートを一か所で検索できます。すべてお使いのコンピューター上で実行され、データが PC の外に送信されることはありません。

CI NuGet Downloads .NET MCP Glama Platforms License: MIT Docs

Google、Telegram、その他ほとんどのサービスからデータをダウンロードできます。問題は、ダウンロードしたデータがほとんど読めない大量の JSON ファイルや CSV ファイルだということです。Backstory はそれらのエクスポートデータをひとつのローカルデータベースに取り込み、まとめて検索できるようにします。コマンドラインから検索することも、MCP 経由で AI アシスタントに接続することもできます。

クラウドにデータが送信されることはありません。データはお使いのマシン上の SQLite ファイルに保存されます。これは、このツールが存在する主な理由です。なぜなら、これは最も個人的なデータだからです。

目次

できること

  • Google、Telegram、Spotify、Instagram のエクスポートデータをインポートできます。
  • 時系列をひとつにまとめ、意味またはキーワードで検索できます。
  • 異なるデータソース間で、同じ人物や場所を照合できます。
  • 「Sarah に夕食のことを最後にメッセージしたのはいつ?」などの質問に、AI エージェントが回答できるようにします。
  • データのエクスポート方法を案内し、ダウンロードが完了すると自動的にインポートします。
  • ベンチマークを実行して、検索の実際の精度を確認できます。

データソース

各データソースは、エクスポートデータをイベントに変換する小さなアダプターです。現在対応しているデータソースと、それぞれが取り込むデータを以下に示します。

データソースインポートするデータエクスポート方法
Google Takeout検索履歴、YouTube の履歴、保存した場所、ロケーション履歴backstory fetch google
Telegramメッセージ、連絡先backstory fetch telegram
Spotify再生履歴、ポッドキャスト、検索履歴backstory fetch spotify
Instagramダイレクトメッセージ、投稿、コメント、検索履歴backstory fetch instagram

新しいデータソースを追加するには、アダプターをひとつ作成するだけです。それ以外を変更する必要はありません。

クイックスタート

.NET 10 SDK が必要です。Linux、macOS、Windows で動作します。

グローバルツールとしてインストールします。

dotnet tool install -g Backstory

または、今すぐソースからビルドします。

git clone https://github.com/magna-nz/backstory && cd backstory
dotnet build Backstory.slnx -c Release

データを取り込みましょう。Backstory がエクスポート方法を案内し、データが Downloads フォルダーに届くとインポートします。

backstory fetch google      # or: telegram
backstory watch

ファイルや zip を直接指定することもできます。複数パートに分かれたものも含め、Takeout の zip は自動で展開されます。

backstory import ~/Downloads/takeout-20240101.zip
backstory import ~/Downloads/telegram-export/result.json

続いて検索します。

backstory search "dinner plans with sarah"
backstory search "trip to japan" --from 2023-01-01

AI エージェントから利用する

Backstory は MCP に対応しているため、どの MCP クライアントからでも(Claude など)、時系列を検索できます。サーバーを起動します。

backstory serve

次のコマンドひとつで登録します。

claude mcp add backstory -- backstory serve

または、MCP の設定に直接追加します。

{
  "mcpServers": {
    "backstory": { "command": "backstory", "args": ["serve"] }
  }
}

これで、「東京で調べたあのラーメン店はどこ?」といった質問をエージェントに尋ねられます。エージェントは Google と Telegram の両方のデータを検索して回答します。

仕組み

エクスポート形式ごとに扱いが異なるため、それぞれを処理して、タイムライン上のイベントと、そこに登場する人や場所という共通の形式に変換する小さなアダプターを用意しています。あとはすべて同じように動作します。データの保存には、キーワード検索用の全文検索インデックスと、意味検索用のベクトルインデックスを備えた SQLite を使用します。検索では両方を実行し、結果を統合します。

flowchart TD
    TG["Telegram<br/>result.json"]:::src
    GT["Google Takeout<br/>JSON / CSV"]:::src

    TG --> AD
    GT --> AD

    AD["Adapters<br/><i>parse and normalize</i>"]:::ingest
    NR["Normalizer<br/><i>events and entities</i>"]:::ingest
    ER["Entity resolution<br/><i>link people and places</i>"]:::ingest
    AD --> NR --> ER

    ER --> FTS[("SQLite + FTS5<br/>timeline, keyword")]:::store
    ER --> VEC[("Vector index<br/>meaning")]:::store

    FTS --> HQ
    VEC --> HQ
    HQ["Search<br/><i>keyword + meaning</i>"]:::query

    HQ --> CLI["CLI"]:::iface
    HQ --> MCP["MCP server"]:::iface

    classDef src fill:#FAECE7,stroke:#993C1D,color:#4A1B0C;
    classDef ingest fill:#EEEDFE,stroke:#534AB7,color:#26215C;
    classDef store fill:#E1F5EE,stroke:#0F6E56,color:#04342C;
    classDef query fill:#E1F5EE,stroke:#0F6E56,color:#04342C;
    classDef iface fill:#F1EFE8,stroke:#5F5E5A,color:#2C2C2A;

magna-nz.github.io/backstory と SPEC.md に、詳細な技術解説があります。

コマンド

コマンド機能
fetch google|telegram|spotify|instagramデータのエクスポート方法を表示し、ページを開きます
watch [--dir <path>]エクスポートが ~/Downloads にダウンロードされると、自動的にインポートします
import <path>エクスポートをインポートします(ファイル、フォルダー、または Takeout zip)
search "<query>"タイムラインを検索します。フィルター:--from --to --source --limit
timeline同じフィルターを使って、イベントを時系列順に一覧表示します
entity "<name>"人や場所を検索します
statsソースと種類ごとの件数、および使用中の埋め込みモデルを表示します
serveMCP サーバーを起動します
model fetch意味検索モデルをダウンロードします(任意、初回のみ)
evalベンチマークを実行します

データベースは $BACKSTORY_DB に保存されます。指定がない場合は ~/.backstory/backstory.db が使われます。

検索品質

テキストをベクトルに変換する方法は2種類あり、切り替えて使用できます。

  • Hashing(デフォルト)。セットアップ不要で、完全にオフラインで動作し、出現する単語に基づいて一致を判定します。使い始めるには十分です。
  • ONNX MiniLM。意味に基づいて一致を判定する、本格的な意味検索です。backstory model fetch を一度実行してください(約90 MB)。すると、Backstory が自動的にこのモデルを使用します。これにより、「japan vacation」で検索すると、「東京へのフライト」についてのメッセージが見つかります。

backstory eval を実行すると、違いを自分で測定できます。サンプルデータを読み込み、2つの数値を報告します。データがどれだけ解析されたか、また、検索結果の上位5件に正しいイベントがどれだけ含まれるかです。

埋め込みモデル解析されたデータ上位5件に正解あり
Hashing(デフォルト)100%87.5%
ONNX MiniLM100%100%

MCP ツール

ツール戻り値
search_timeline自然言語のクエリに対する、順位付けされたイベント
get_eventsIDで指定したイベントの全記録。ソースへの参照を含みます
lookup_entity名前で指定した人や場所
summarize_periodエージェントが要約するための日付範囲内のすべてのイベント
list_sourcesインポートされたソースと、それぞれのイベント数

プライバシー

すべてローカルで実行され、テレメトリーはありません。Backstory がネットワークに接続するのは、検索モデルをダウンロードするために backstory model fetch を実行するときだけです。この手順は任意です。データがマシンの外に出ることはありません。データベースやエクスポートを誤ってコミットしないよう、.gitignore を設定しています。

ライセンス

MIT。詳しくは LICENSE を参照してください。ModelContextProtocol SDK、ONNX Runtime、all-MiniLM-L6-v2 を基盤として構築されています。

コメント

MCP は初めてですか?

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

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