1. 服务概述
一句话简介:Claude Code 的跨会话 WebFetch 缓存。Claude Code 内置的 WebFetch 在单个会话中缓存结果 15 分钟,claude-webcache 将其扩展到跨会话,无限期缓存(TTL 7 天,可配置)。
- 服务名称:claude-webcache
- 版本号:最新版本
- 开发者/提供方:theYahia
- 协议类型:MCP (Model Context Protocol)
2. 核心功能
claude-webcache 提供跨会话的网页内容缓存功能,解决 Claude Code 内置 WebFetch 缓存时间短的问题:
- cached_fetch:从缓存获取网页内容,如果缓存命中则立即返回,否则返回 [CACHE_MISS]
- cache_store:将网页内容存储到缓存,供后续会话使用
- cache_stats:获取缓存统计信息,包括总缓存数、命中数、最后获取时间
- cache_list:列出最近缓存的 URL(按最近使用排序)
- SessionStart hook:在每个新会话开始时注入缓存统计信息
3. 使用场景
claude-webcache 适用于以下场景:
- 跨会话缓存网页内容:打开新会话时,过去的获取内容仍然存在,无需重新获取
- 减少重复获取相同 URL:在多个会话中访问相同的文档、API 参考、研究页面时,避免每次都支付完整的获取成本
- 提高 AI 助手响应速度:缓存命中时立即返回,无需等待网络请求
- 节省 API 调用成本:减少对外部 API 的重复调用,降低成本
- 离线访问已缓存内容:即使网络不可用,也可以访问之前缓存的网页内容
4. 接入方式
4.1 服务端点
claude-webcache 是一个本地运行的 MCP 服务,使用 SQLite 数据库存储缓存数据。缓存数据库位于~/.webcache/cache.db(WAL 模式,并发安全)。
4.2 认证与权限
claude-webcache 完全本地运行,不需要任何认证。所有缓存数据存储在本地,确保隐私和安全。
4.3 数据格式
缓存使用 SQLite 数据库存储,缓存键为SHA256(url + "|" + prompt)。数据表结构:
| 字段 | 类型 |
|---|---|
key | TEXT PRIMARY KEY |
url | TEXT |
prompt_hash | TEXT |
output | TEXT |
cached_at | INTEGER (ms epoch) |
hit_count | INTEGER |
last_hit_at | INTEGER |
4.4 服务器配置
选项 1:Claude Code 插件(推荐)
# 一行命令安装 claude plugin marketplace add theYahia/claude-webcache && claude plugin install claude-webcache@theyahia然后将使用模式添加到~/.claude/CLAUDE.md(参见使用模式章节)。
选项 2:npm 全局安装
# 安装 npm i -g @theyahia/claude-webcache # 然后在 ~/.claude/settings.json 中手动注册 # 将路径替换为 npm root -g 的结果选项 3:克隆仓库(贡献者)
git clone https://github.com/theYahia/claude-webcache && claude --plugin-dir ./claude-webcache/plugin5. 接口定义
claude-webcache 提供 4 个 MCP 工具接口:
| 工具 | 参数 | 返回值 |
|---|---|---|
cached_fetch | url,prompt | 缓存的文本,或[CACHE_MISS] <url> |
cache_store | url,prompt,output | stored |
cache_stats | -- | { total, hits, last } |
cache_list | limit? | 最近的 URL(按最近使用排序) |
6. 快速开始
6.1 环境要求
- Node.js 22.5+(使用内置的
node:sqlite,无需原生依赖) - Claude Code(推荐使用插件方式)
6.2 安装步骤
# 方法 1:Claude Code 插件(推荐) claude plugin marketplace add theYahia/claude-webcache && claude plugin install claude-webcache@theyahia # 方法 2:npm 全局安装 npm i -g @theyahia/claude-webcache # 方法 3:克隆仓库 git clone https://github.com/theYahia/claude-webcache && claude --plugin-dir ./claude-webcache/plugin6.3 使用模式
将以下内容添加到~/.claude/CLAUDE.md,让 Claude 通过缓存路由网页获取:
## WebFetch caching (claude-webcache) Before calling WebFetch, call `cached_fetch(url, prompt)` first. - If it returns text -> use that, do NOT call WebFetch. - If it returns `[CACHE_MISS] <url>` -> call WebFetch as normal, then call `cache_store(url, prompt, output)` with the result.7. 注意事项
TTL(生存时间)
默认 7 天。过期的条目在下次读取相同键时删除。可以通过引入src/cache.js并调用purgeExpired()手动清除过期条目。
SessionStart hook
在每个新会话开始时,hook 会注入一行统计信息:
webcache: 142 pages cached, 38 hits, last fetch 3h ago如果缓存为空,则跳过注入。
限制
- 缓存键包含提示:同一 URL 上的不同提示是单独的条目。选择一致的提示(例如始终使用
"extract title and main content")以最大化命中率 - 输出格式:输出是 WebFetch 返回的任何内容(已由模型总结)。缓存不会重新处理它
- 精确匹配:无语义搜索,无嵌入。仅精确的
(url, prompt)匹配
工作原理
- 打开新会话:过去的获取内容仍然存在
- 缓存命中:立即返回
- 缓存未命中:与内置 WebFetch 相同
相同的 URL + 相同的提示在任何未来的会话中 = 立即缓存命中。
为什么需要 claude-webcache?
每当您在会话之间重新获取相同的 URL —— 文档、API 参考、研究页面 —— 您每次都要支付完整的获取成本。15 分钟的会话内缓存在您的下一个冲刺之前就会清除。claude-webcache 保持获取内容可用,因此第二个会话命中缓存而不是重新获取。