浏览器历史查询
本地CLI+MCP服务器,用于摄取Safari/Chrome/Firefox/Edge/Brave历史记录、自动标记访问并回答快速问题(例如,“列出我访问过的所有GitHub项目”,“我最近访问过哪些AI网站”),而无需向任何地方发送数据。

特性
- 复制浏览器历史数据库(Safari、Chrome、Firefox、Edge、Brave),转换时间戳并存储为
data/history_store.db. - 重复数据消除:默认情况下,摄入重复数据消除在
url+timestamp(使用唯一索引强制执行),并跟踪每个源的事件;您可以通过以下方式切换到每个源的重复数据消除--dedupe-scope source. - 自动标签启发式:
github_project,ai,personal_site,docs,news,social,shopping,video,other. - 从标题/路径导出的摘要(例如,GitHub仓库成为
owner/repo),可选的页面元数据获取以改进标题/描述,以及对URL/标题/摘要/域/路径/标签的全文搜索。 - 自然语言ish
ask命令将问题路由到过滤器;reclassify允许您在调整启发式后刷新标签。 - MCP服务器公开工具/资源,以便代理可以调用相同的摄取/查询/询问逻辑。
设置
python3.11 -m venv .venv
. .venv/bin/activate
pip install -e .
# for tests/dev extras
pip install -e .[dev]命令行界面
- 新访问次数(重复):
browser-history ingest --browser safari|chrome|firefox|edge|brave|all(自动检测Chrome/Edge/BBrave配置文件和Firefox release/beta/dev/ESR配置文件;添加--limit 200取样;添加--fetch-metadata通过网络提取页面标题/描述;使用--metadata-max为了限制每次运行获取的页面数量,默认值为500;--progress-every记录进度;--state-interval更频繁地冲洗入口;--dedupe-scope global|source选择全局重复数据消除(默认)或按浏览器/配置文件;--analyze摄取后运行SQLite ANALYZE;--vacuum用于离线真空)。如果找不到请求的浏览器数据库,则会打印警告。 - 按筛选器查询:
browser-history query --category ai --since 30d --limit 20 [--source safari|chrome:Profile|firefox:Profile] - 全文搜索:
--search foo在URL/标题/摘要/域/路径/标签上使用SQLite FTS5(如果FTS5不可用,则回退到LIKE)。 - 用简单的文字提问:
browser-history ask "list all the github projects" - 在存储行上重新运行分类器(在启发式更改后):
browser-history reclassify - 将旧行回填到
visit_occurrences:browser-history backfill-occurrences [--source foo] [--limit 1000] - 运行维护:
browser-history maintain(默认为分析+真空;传递--analyze或--vacuum限制) - 统计数据:
browser-history stats [--since 30d] [--source ...]显示覆盖率、按类别计数、按来源计数和每个来源的ingest_state(包括配置文件名称)。 - 守护进程:
browser-history daemon --browser all --fetch-metadata --metadata-max 200 --interval 1800 --progress-every 1000在计时器上运行连续摄取;按Ctrl+C停止。 - 共同
--since格式:7d,12h,2024-12-01.
数据存在于 data/history_store.db;浏览器DB的快照保存在 data/*_snapshot.db 为了确保摄入安全。
MCP服务器
- 运行:
browser-history-mcp(stdio传输)。需要mcpPython包(通过安装pip install -e .). - 工具:
ingest_history(browser?, limit?, fetch_metadata=false, metadata_max=500?, dedupe_scope=global|source)(浏览器包括safari/chrome/firefox/edge/barve/all),query_history(category?, search?, domain?, source?, since?, limit),ask_history(question, limit),stats_history(since?, source?),backfill_occurrences(source?, limit?). - 资源模板:
resource://browser/history/recent/{limit}以JSON格式返回最近的访问。 - 任何支持MCP的客户端都可以通过stdio连接;除了将客户端指向
browser-history-mcp命令。
备注
- 分类只是启发式的(没有网络/LLM调用)。在中添加更多图案
browser_history/classifier.py如果你想要更好的水桶。 - 要重新开始,请删除
data/history_store.db并重新运行ingest. - 摄入状态(进度、上次看到的时间戳、元数据计数)存储在
ingest_state里面data/history_store.db;browser-history stats按来源打印,以便您可以恢复/监视长时间运行。每次访问还存储事件(源+原始时间戳),这样您就可以在使用全局重复数据消除时看到所有访问同一页面的浏览器/配置文件。 - 发布/发布:标签
v*触发构建;集PYPI_API_TOKEN通过提供的GitHub Actions工作流发布仓库机密。CI在Python 3.9–3.12中对推送/PR进行测试。
