内容
# 总回忆
> 一个本地、可搜索、加密的索引,记录您计算机上发生的一切 — 基于.NET 10,完全开源,**100% 在设备上**,可选MCP服务器,以便AI代理可以查询它。
<img width="1664" height="1093" alt="image" src="https://github.com/user-attachments/assets/4c7f07c6-6336-469b-94b8-a5035c6a7f58" />
---
## 它做什么
每隔N秒(默认:10秒),TotalRecall会截取屏幕上可见窗口的截图,跳过视觉上未更改的窗口,对更改后的图像运行OCR提取文本,并将结果存储在本地SQLite数据库中:
- 窗口标题和应用程序名称
- 进程名称 + 可执行文件路径
- 窗口边界和是否在前台
- 可见的完整OCR文本
- 窗口截图本身,存储为JPEG blob
然后,您可以:
- **浏览** 每个快照,带有JPEG预览窗格和全文视图的暗色主题WinForms UI。
- **搜索** 跨越数年的活动,毫秒级搜索,使用SQLite **FTS5**全文搜索(带有高亮片段)。
- **筛选** 按应用程序、日期范围或两者。
- 可选地通过 **模型上下文协议** 将数据库公开给AI代理,以便助手可以回答问题,例如 *"我上周二看到的发票号码是多少?"*
愿景是个人、私有的“计算机内存” — Microsoft Recall,但开源且完全属于您。
---
## 安装
完整的桌面应用程序有两种安装选项,另外还有一种仅适用于MCP服务器的选项 — 请选择您喜欢的:
### 选项1 — 安装程序 🟢 *推荐*
单个`setup.exe`,无需管理员/UAC权限,按用户安装,带有适当的添加/删除程序条目。
1. 从 <https://github.com/ilyafainberg/TotalRecall/releases> 下载 `TotalRecall-1.2.0-Setup.zip`。
2. 解压(安装程序位于ZIP文件中,因此浏览器不会将其标记为“非常用下载”)。
3. 双击它。
4. Windows SmartScreen会显示 *"Windows保护了您的电脑"*,因为此版本尚未经过Authenticode签名 — 点击 **更多信息 → 运行任何方式**。
5. 选择安装文件夹(默认为 `%LOCALAPPDATA%\Programs\TotalRecall\`)和可选快捷方式(开始菜单/桌面 / *在Windows登录时启动到托盘*)。点击 **安装**。
6. 从开始菜单启动 *TotalRecall* (或在最终向导页面选中 **启动TotalRecall**)。
MCP服务器(`TotalRecall.Mcp.exe`)位于主应用程序旁边,位于 `<安装目录>\McpServer\`。
### 选项2 — 便携式ZIP
如果您希望控制应用程序的位置(例如在USB驱动器上或 `C:\Tools\`下),请获取便携式ZIP — 无需安装,无需开始菜单条目,无需添加/删除程序条目。自包含,无需.NET运行时。
1. 从 <https://github.com/ilyafainberg/TotalRecall/releases> 下载 **`TotalRecall-1.2.0-Portable-win-x64.zip`**。
2. 提取到 **稳定**的位置(例如 `C:\Tools\TotalRecall\`)。不要从下载中运行 — 您必须为AI代理配置的MCP路径永久保存。
3. 运行 `TotalRecall\TotalRecall.exe`。
便携式ZIP布局:
```
TotalRecall-1.2.0-Portable-win-x64\
├─ TotalRecall\
│ └─ TotalRecall.exe ← 桌面应用程序
├─ TotalRecall.Mcp\
│ └─ TotalRecall.Mcp.exe ← MCP服务器(参见下面的“MCP服务器设置”)
├─ README.md
├─ INSTALL.txt
└─ LICENSE
```
### 选项3 — 仅MCP服务器(无桌面应用程序)
只需AI代理集成,不需要捕获UI?获取独立的MCP捆绑包。有用如果您已经在计算机上有一个TotalRecall数据库(从以前的安装或另一个用户),只需要服务器来公开它。
1. 从发布页面下载 **`TotalRecall-Mcp-1.2.0-win-x64.zip`**。
2. 提取到 **稳定**的位置(例如 `C:\Tools\TotalRecall.Mcp\`)。
3. 将其连接到您的MCP主机 — 参见捆绑包自己的 `README.md`,其中包含有关Microsoft Scout,GitHub Copilot CLI,Claude Desktop,VS Code Copilot Chat和Cursor的代码段。
该捆绑包还附带一个 `INSTALL-WITH-AGENT.md`,其中包含一个一次性提示,您可以将其粘贴到任何具有shell +文件编辑工具的AI代理中 — 代理将下载,提取并将配置合并到正确的 `mcp-config.json`中。有关手动设置和代理提示路径,请参见下面的[MCP服务器设置](#mcp服务器设置)。
### 首次运行设置(任意选项)
1. 在 **设置**选项卡上,选择加密模式(默认为 **Windows帐户** — DPAPI加密,无声解锁)和捕获间隔(默认为10秒)。点击 **保存**。
2. 在 **捕获**选项卡上,点击 **开始**。
3. (可选)将 `TotalRecall.Mcp.exe`连接到您的AI代理 — 参见 [MCP服务器设置](#mcp服务器设置),适用于Microsoft Scout,GitHub Copilot CLI和Claude Desktop连接。
所有软件包都是 **自包含**的 — 无需单独的.NET运行时安装。
> **关于SmartScreen警告:** 在二进制文件经过Authenticode签名之前,Windows SmartScreen将警告首次启动Inno Setup安装程序和便携式ZIP — 点击 **更多信息 → 运行任何方式**。
### 命令行标志
| 标志 | 效果 |
|------|--------|
| `--tray` | 在系统托盘中启动(启用 **设置 → 最小化到托盘**)。 |
| `--capture-on` | 强制捕获启动,无论上次记住的状态如何。 |
| `--capture-off` | 强制捕获停止,无论上次记住的状态如何。 |
| `--minimized` / `-m` | 最小化启动(任务栏,或如果启用托盘模式,则在托盘中)。 |
| `--help` / `-h` / `/?` | 打印用法并退出。 |
如果未传递 `--capture-on` 和 `--capture-off`,TotalRecall将恢复其上次关闭时的捕获状态。
---
## MCP服务器设置
MCP服务器是一个单独的控制台可执行文件,通过stdio进行JSON-RPC。它打开与UI写入的同一个SQLite数据库,并为AI代理提供6种查询活动历史的工具。
### 公开的工具
| 工具 | 目的 |
|------|---------|
| `search_recall(query, app?, from?, to?, limit?)` | FTS5搜索;返回带有高亮片段的窗口 |
| `get_window(window_id, include_image?)` | 完整的窗口行,包括OCR文本;可选base64 JPEG |
| `list_snapshots(from?, to?, limit?)` | Tick级浏览 |
| `get_snapshot(snapshot_id)` | 单个Tick的所有窗口 |
| `list_apps()` | 已捕获的 `app_name` 值列表 |
| `stats()` | 行计数,总图像字节,第一个/最后一个时间戳 |
### 配置
MCP服务器读取 `%LOCALAPPDATA%\TotalRecall\settings.json` 以查找数据库路径,OCR语言和加密模式 — 因此,一旦配置了UI,您通常不需要传递任何内容。您可以覆盖:
| 标志/环境变量 | 目的 |
|---|---|
| `--db <path>` / `TOTALRECALL_DB` | 覆盖数据库路径 |
| `--passphrase <s>` / `TOTALRECALL_PASSPHRASE` | 提供密码短语(如果使用密码短语加密,则需要) |
### 安装MCP服务器的两种方法
您可以将MCP服务器 **作为完整的TotalRecall桌面应用程序的一部分** (Inno Setup安装程序将其附带在WinForms应用程序旁边),或 **单独** 从独立的捆绑包中安装。独立捆绑包在以下情况下很有用:
- 您正在配置一台机器上的AI助手,其中TotalRecall已经运行,但您不想安装两次桌面应用程序。
- 您正在索引一个位于共享驱动器/NAS上的数据库。
- 您想将MCP服务器注册到远程/CI代理主机,不需要GUI。
对于独立捆绑包,有 **两种安装路径**:将作业交给AI代理(下面的简单路径),或手动执行。
#### ✨ 使用AI代理安装(一次性)
如果您已经在AI代理会话中(Microsoft Scout,GitHub Copilot CLI,Claude Code,Cursor等),您可以交给它安装作业。在新的代理回合中粘贴下面的提示 — 代理将从最新的GitHub发布版本下载zip,提取它,检查二进制文件,检测您正在运行的MCP主机,并 **合并** (不是覆盖)一个`"totalrecall"`条目到正确的 `mcp-config.json` 中:
```
您将在此Windows机器上安装TotalRecall MCP服务器。请按照以下步骤进行,不要在步骤之间要求确认:
1. 从GitHub发布页面下载最新的TotalRecall MCP zip:
https://github.com/ilyafainberg/TotalRecall/releases/latest
资产名称模式为: TotalRecall-Mcp-<version>-win-x64.zip
使用GitHub API(https://api.github.com/repos/ilyafainberg/TotalRecall/releases/latest)如果需要解析确切的URL。将其保存到 %TEMP%。
2. 将zip文件解压到稳定的按用户安装目录:
%LOCALAPPDATA%\Programs\TotalRecall.Mcp\
如果它已经存在,请覆盖它。安装后服务器二进制文件必须位于:
%LOCALAPPDATA%\Programs\TotalRecall.Mcp\TotalRecall.Mcp\TotalRecall.Mcp.exe
3. 健全性检查服务器:运行 .exe文件一次,带有 `--help` 并确认它打印工具列表而没有崩溃。如果它崩溃,请显示stderr给我并停止。
4. 检测您正在运行哪个MCP主机(您是代理 — 选择正确的):
- Microsoft Scout / Clawpilot → %USERPROFILE%\.clawpilot\mcp-config.json
- GitHub Copilot CLI → %USERPROFILE%\.copilot\mcp-config.json
- Claude Desktop → %APPDATA%\Claude\claude_desktop_config.json
- VS Code Copilot Chat → %APPDATA%\Code\User\settings.json
(键:github.copilot.chat.mcp.servers)
- Cursor → %USERPROFILE%\.cursor\mcp.json
读取现有的文件(或如果丢失则创建它)并合并 — 不要替换 — 一个`"totalrecall"`条目到适当的位置 `mcpServers` 键下:
"totalrecall": {
"command": "<您安装的.exe文件的完整路径>",
"args": [],
"env": {
"TOTALRECALL_DB_PATH": "<%LOCALAPPDATA%>\\TotalRecall\\totalrecall.db"
}
}
保留文件中已经存在的其他mcpServers。漂亮地打印JSON。
5. 告诉我您配置了哪个主机,安装的.exe文件的绝对路径,TOTALRECALL_DB_PATH下的TotalRecall DB是否已经存在,以及您需要重启主机才能使服务器生效。
如果出现任何问题,请停止并告诉我哪里出了问题。
```
**为什么这样做是安全的:**
- 只写入按用户目录(`%LOCALAPPDATA%`, `%USERPROFILE%`, `%APPDATA%`)— 无需管理员权限,无需系统范围的更改。
- 合并到现有的 `mcp-config.json` 文件中,不会覆盖。
- 自包含的.NET 10二进制文件,无需运行时安装。
- 服务器默认情况下为只读;写入由 `TOTALRECALL_READONLY=0` 控制。
捆绑包自己的 `INSTALL-WITH-AGENT.md` 附带了相同的提示以供共享。
#### MCP服务器的手动安装
1. 从 <https://github.com/ilyafainberg/TotalRecall/releases/latest> 下载 **`TotalRecall-Mcp-1.2.0-win-x64.zip`**。
2. 提取到 **稳定**的路径(例如 `C:\Tools\TotalRecall.Mcp\`)。.exe文件必须最终位于 `C:\Tools\TotalRecall.Mcp\TotalRecall.Mcp\TotalRecall.Mcp.exe`。
3. 烟雾测试二进制文件:
```powershell
C:\Tools\TotalRecall.Mcp\TotalRecall.Mcp\TotalRecall.Mcp.exe --help
```
4. 打开捆绑包自己的 **`README.md`** 以复制粘贴配置片段到每个主机(Microsoft Scout,GitHub Copilot CLI,Claude Desktop,VS Code,Cursor)— 或者使用下面的模板。
### 注册AI助手
#### Microsoft Scout / GitHub Copilot CLI
编辑 `%USERPROFILE%\.copilot\mcp-config.json`:
```jsonc
{
"mcpServers": {
"TotalRecall": {
"type": "local",
"command": "C:\\Tools\\TotalRecall\\TotalRecall.Mcp\\TotalRecall.Mcp.exe",
"args": [],
"tools": ["*"]
}
}
}
```
重启代理以使新服务器生效。
#### Claude Desktop
编辑 `%APPDATA%\Claude\claude_desktop_config.json`:
```jsonc
{
"mcpServers": {
"totalrecall": {
"command": "C:\\Tools\\TotalRecall\\TotalRecall.Mcp\\TotalRecall.Mcp.exe",
"args": [],
"env": {
// 如果您选择了密码短语加密:
// "TOTALRECALL_PASSPHRASE": "您的短语"
}
}
}
}
```
重启Claude Desktop。
#### 其他任何MCP-aware客户端
通过stdio启动 `TotalRecall.Mcp.exe`。标准MCP `initialize` / `tools/list` / `tools/call` JSON-RPC通过stdin/stdout。
### 一旦注册,您可以问这样的问题
- *"在过去3小时内搜索我的回忆中提到的'发票'窗口。*
- *"今天早上我打开了哪些应用程序?*
- *"找到我正在阅读有关Power Platform定价的窗口并总结文本。*
- *"显示窗口4218的截图。*(代理将调用 `get_window`并包含 `include_image: true`)
代理只能看到它显式查询的行 — 它无法流式传输或渗出整个数据库。
---
## 路线图 / 缺失的内容
- 应用程序允许/阻止列表(例如,始终跳过1Password,银行网站等)
- OCR文本的向量嵌入,用于FTS5之外的语义搜索
- 捕获时对捕获内容的“redact”操作,屏蔽任何看起来像凭证字段的内容
- 内容嵌入(CLIP / SigLIP),以便代理可以进行 *视觉* 搜索(“带有红色条形的图表”)
- 导出 / 共享工具(加密的快照存档,redacted JSON导出)
欢迎PR。
---
## 设备上,开放源代码,循环中无AI
这是刻意的设计选择。捕获管道 **不** 调用任何云服务。具体来说:
- **截图** 通过Win32 `PrintWindow`捕获 — 像素永远不会离开您的机器。
- **OCR** 在本地运行 **Tesseract 5** (Apache 2.0)。没有视觉API,没有云OCR,没有遥测。
- **存储** 是本地SQLite文件,使用 **SQLCipher** (BSD/MIT)进行静止加密。
- **搜索** 是本地SQLite FTS5。
没有AI模型,LLM或云服务参与捕获,OCR,存储或搜索。
**唯一** 启用MCP服务器时,AI才会涉及其中。 在这种情况下,代理调用MCP服务器的工具,这些工具返回您本地数据库的行。 数据库仍然永远不会离开机器 — 您配置的模型查询结果仅发送到您配置的模型。
如果您从未启用MCP服务器,则AI永远不会看到您数据的任何字节。
### 许可
**TotalRecall根据GNU通用公共许可证v3.0** (或您选择的其他版本)授权 - 请参阅 [LICENSE](LICENSE) 文件以获取完整文本。 Copyright © 2026 Ilya Fainberg. 这是 **强烈的共用许可**:您可以自由使用,研究,分享和修改代码,但您分发的任何包含TotalRecall的工作也必须在GPLv3下发布。
依赖及其许可证:
| 依赖项 | 许可证 |
|---|---|
| .NET 10 / WinForms | MIT |
| Tesseract(.NET包装 + 本地Tesseract / Leptonica) | Apache 2.0 |
| Microsoft.Data.Sqlite.Core | MIT |
| SQLitePCLRaw.bundle_e_sqlcipher(SQLCipher) | BSD-3(包装)+ zlib/MIT(SQLCipher) |
| ModelContextProtocol(C# SDK) | MIT |
上述所有内容都与GPLv3分发兼容。 ---
安全:加密选项
数据库可以在静态时使用 **SQLCipher** (256 CBC + PBKDF2 + HMAC)进行加密。您可以在设置中选择密钥来源:
| 模式 | 密钥存储位置 | 解锁用户体验 | 使用场景 |
|------|---------------------|-----------|-------------|
| **无** | — | 无密钥 | 沙盒机器、临时测试 |
| 账户** | 32 个随机字节,只生成一次,使用 `DataProtectionScope.CurrentUser` 在 `%LOCALAPPDATA%\TotalRecall\db.key` 处进行 **DPAPI 加密**。仅可由此机器上的 Windows 用户账户解密。 | 静默 — 自动解锁 | 个人机器的默认设置 |
| **密码短语** | 您输入的密码短语。永不持久保存。 |应用程序启动时都需要并且需要启动 MCP 服务器) | 共享机器、双因素认证、U盘等场景 |
切换加密模式只会影响新创建的数据库。要重新加密现有的数据库,请指向一个新的文件路径并重新捕获。
### 推荐的强化措施
- 至少使用 **Windows 账户** 加密运行。
- 将数据库存储在 **BitLocker** 加密的驱动器上。
- 对于共享机器,使用 **密码短语** 模式 — 即使是管理员,如果没有您的密码短语,也无法解锁文件。
- 使用内置的保留策略删除旧截图或旧行,然后让自动压缩运行 `VACUUM` 以回收数据库文件空间。
- 永远不要共享 `db.key` 文件或 `.db` 文件。`db.key` 文件绑定到您的 Windows 用户,但仍然是一个敏感的工件。
### 捕获内容(隐私)
TotalRecall 捕获 **屏幕上可见的所有内容**。这包括:
- 电子正文、聊天消息、文档文本。
- 浏览器选项卡中内容,包括未屏蔽的密码。
- 通知横幅、 日历预览等。
请相应地处理数据库。目前尚无针对要跳的允许列表/阻止列表 — 如果您不想捕获特定应用程序的内容,请在下一次快照之前化或停止捕获。
---
## 从源代码构建
> 大多数用户只需获取 [发布 ZIP](#install) 即可 — 本节适用于贡献者。
先决条件:**.NET 10 SDK**,Windows 10/11 x64。
```powershell
git://github.com/ilyberg/.git
cd Total TotalRecall.sln -c Release
```
发布中相同的独立 `.zip` 文件:
.\build-release.ps1 -Version 1.0.0输出:
```
TotalRecall\bin\x64\Release\net10.0-windows\TotalRecall.exe # UIRecall.Mcp\bin\Release\net10.0-windows\TotalRecall.Mcp.exe # MCP 服务器
```
运行 UI:
```powershell
.\TotalRecall\bin\x64\Release\net10.0-windows\TotalRecall.exe
```
UI 是一个单一窗口:
- **标题栏** — 一个紧凑的捕获栏,带有实时状态指示(绿色圆点 ● *录制中* / 灰色圆点 ● *空闲*),间隔/质量/加密摘要,上次快照的时间 + 窗口数量,一个 **开始 / 停止** 切换按钮,以及一个 **☰** 汉堡菜单。
- **主体(浏览)** — 您生活中的三窗格工作区:
1. **结果** — FTS5 搜索框 + 应用程序过滤器时间范围** 下拉菜单(任意时间 · 今天 · 过去 24 小时 · 过去 7 天 · 过去 30 天 · 今年 · 自定义…),可排序的行(点击 **何时 / 标题 / 应用程序** 进行排序)。
2. **预览** — JPEG 截图,带有缩放滑块(适应 · 25/75/100/150/200 %)。使用 **Ctrl+0** 适应,**Ctrl+1** 100%,**Ctrl+** / **Ctrl-** 步进,或 **Ctrl+滚轮**。右键 → *在默认查看器中打开* / *另存为…*。
3. **捕获的文本** —折叠、可调整大小的窗格中的完整 OCR 转录文本。使用 **箭头条** 按钮折叠它(在预览工具栏中会出现一个恢复按钮以将其恢复)。右键 → *复制* / *全选*。
- **汉堡菜单(☰)** — 刷新结果(**F5**),活动日志(**Ctrl+L**),设置…(**Ctrl+,**),打开 DB 文件夹(**Ctrl+Shift+D**),检查更新…,关于,退出。
- **活动日志** 和 **设置** 是单独的非模态窗口从汉堡菜单中打开它们存储在 `%LOCALAPPDATA%\TotalRecall\settings.json` 中。默认数据库路径为 `%LOCALAPPDATA%\TotalRecall\recall.db`。
### 在后台运行
**设置 → 行为** 下的两个设置可以将 TotalRecall 变成一个安静索引器:
- **我登录到 Windows 时启动 TotalRecall** — 在 `HKCU\Software\Microsoft\Windows\CurrentVersion\Run` 下写入(或删除)一个每用户条目,以便应用程序在每次登录时以 `--minimized` 启动。无需管理员权限,无需计划任务,无需服务。仅影响当前 Windows 用户。
- **最小系统托盘** — 启用后,**X** 按钮和最小化按钮会将应用程序发送到托盘图标而不是关闭它。右键单击托盘图标可 *打开 / 启动捕获 / 停止捕获 / 退出*。双击可恢复窗口。
当应用程序以 `--minimized` 启动 **并且** 托盘模式启用时,它会隐藏在托盘中并 **自动启动捕获** (因此,新登录后立即恢复索引)。如果启用 `--minimized` 但托盘模式关闭,它只会最小化到任务栏。
您还可以使用相同的标志从任何快捷方式或计划任务启动它:
```powershell
TotalRecall.exe --minimized
添加 OCR 语言
从 <https://github.com/tesseract-ocr/tess> 下载其他 `.traineddata` 文件到 `TotalRecall.Core\tessdata\` 目录,然后重新编译。然后在设置中选择语言(例如 `eng+fra` 表示英语 + 法语)。
---
## 许可证
TotalRecall — 一个本地屏幕活动索引器。
版权 © 2026 Ilya Fainberg.
本程序是免费软件:您可以根据 **GNU 通用公共许可证** 的条款,由自由会发布的 **第 3 版**,或(按您的选择)任何,重新分发和/或修改它。
本程序以 **无任何保证** 的形式发布;甚至不保证其具有 **可销售性** 或 **适用于特定目的**。有关详细信息,请参阅 GNU 通用公共许可证。
您应该随程序收到 GNU 通用公共许可证的副本,位于 [LICENSE](LICENSE) 文件中。如果没有,请参见 <https://www.gnu.org/licenses/>。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器