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 助手查询。

主要功能

  1. 01导入 Google、Telegram、Spotify 和 Instagram 数据
  2. 02按关键词或含义搜索事件
  3. 03跨来源匹配人物和地点
  4. 04自动导入下载完成的数据
  5. 05通过基准测试评估搜索质量

适用场景

  1. 01跨导出文件查找过往消息或活动
  2. 02联合检索位置与媒体历史
  3. 03让 AI 助手查询本地个人时间线

MCP 相关

Backstory 提供 MCP 服务,供 MCP 客户端搜索时间线、获取事件记录、查找人物或地点、汇总日期范围并列出已导入来源。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
nugetBackstory1.1.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Backstory

在一个地方搜索所有数据导出文件。它完全在你自己的电脑上运行,你的任何数据都不会离开电脑。

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

你可以从 Google、Telegram 和大多数其他服务下载自己的数据。问题在于下载得到的内容:一堆几乎无法阅读的 JSON 和 CSV 文件。Backstory 会将这些导出文件导入一个本地数据库,让你一次搜索所有数据。你可以通过命令行搜索,也可以通过 MCP 将它连接到 AI 助手。

数据不会发送到云端。你的数据会保存在自己电脑上的 SQLite 文件中。这正是这个工具存在的主要原因,因为这些是你最私人的数据。

目录

功能介绍

  • 导入来自 Google、Telegram、Spotify 和 Instagram 的数据导出文件。
  • 将所有内容作为一条时间线,按含义或关键词搜索。
  • 在不同数据来源中匹配同一个人或地点。
  • 回答 AI Agent 的问题,例如“我上次什么时候给 Sarah 发消息聊晚餐的?”。
  • 展示如何导出数据,并在下载完成后自动导入。
  • 生成基准测试报告,让你了解搜索的实际效果。

数据来源

每种数据来源都由一个小型适配器负责将导出文件转换为事件。以下是目前支持的来源及其导入内容。

来源导入内容导出方式
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 压缩包会自动解压,包括多部分压缩包:

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 Agent 使用

Backstory 支持 MCP,因此任何 MCP 客户端(Claude 等)都能查询你的时间线。启动服务:

backstory serve

用一条命令注册:

claude mcp add backstory -- backstory serve

或者直接将其添加到 MCP 配置中:

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

现在,你可以向 Agent 提问,例如“我在东京查过的那家拉面店叫什么?”,它会搜索你的 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按来源和类型统计数量,并显示正在使用的嵌入器
serve运行 MCP 服务
model fetch下载语义搜索模型(可选,只需下载一次)
eval运行基准测试

数据库位于 $BACKSTORY_DB,默认路径为 ~/.backstory/backstory.db。

搜索质量

有两种将文本转换为向量的方式,你可以在两者之间切换:

  • 哈希(默认)。无需设置,完全离线,根据出现的词语进行匹配。足以满足入门使用。
  • ONNX MiniLM。真正的语义搜索,可根据含义进行匹配。运行一次 backstory model fetch(约 90 MB),Backstory 就会自动使用该模型。这样,搜索“日本度假”就能找到提到“飞往东京”的消息。

你可以通过 backstory eval 自行衡量差异。它会加载示例数据并报告两个数字:解析了多少数据,以及正确事件出现在搜索结果前 5 条中的频率。

嵌入器已解析数据前 5 条中有正确结果
哈希(默认)100%87.5%
ONNX MiniLM100%100%

MCP 工具

工具返回内容
search_timeline针对自然语言查询排序后的事件
get_events按 ID 返回完整事件记录,包括指向来源的引用
lookup_entity按名称查找人物或地点
summarize_period指定日期范围内的所有事件,供 Agent 总结
list_sources已导入的来源及各自的事件数量

隐私

所有操作都在本地运行,不会收集遥测数据。Backstory 只有在你运行 backstory model fetch 下载搜索模型时才会连接网络,而且这一步是可选的。你的数据不会离开本机。.gitignore 已配置好,避免数据库或导出文件被意外提交。

许可证

MIT。详见 LICENSE。基于 ModelContextProtocol SDK、ONNX Runtime 和 all-MiniLM-L6-v2 构建。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。