LocalCan

官方

为AI代理提供本地主机的公共URL(隧道)、实时HTTP流量检查、快照发布和访问控制。

你可以用 LocalCan MCP 做什么?

  • 检查捕获的流量 — 让您的助手通过 list_traffic 列出最近的交换,或通过 get_exchange 以 Markdown、curl 或 HAR 格式获取完整的请求/响应。
  • 管理公共隧道 — 使用 create_public_url 和 pause_public_url 等工具创建、暂停、恢复或移除公共 URL,包括设置自定义请求头。
  • 发布和刷新快照 — 使用 publish_snapshot 将文件夹部署为可共享的快照,之后通过 update_snapshot 更新,确保预览链接保持最新。
  • 控制访问和评论 — 使用 set_password 为 URL 设置密码保护,通过 list_comments 查看评论线程,并直接从您的助手中回复或解决它们。
  • 检查隧道和服务状态 — 使用 get_status 确认捕获正在运行,或使用 list_public_urls 查看哪些链接处于活动、暂停或提供快照状态。

文档

MCP 服务器

运行 LocalCan 的 Model Context Protocol 服务器并将其接入你的 MCP 主机,附工具与开关的完整参考。

localcan mcp 通过 stdio 运行 Model Context Protocol 服务器。MCP 主机(Claude Code、Codex、Cursor、Claude Desktop 等)会启动它并调用 LocalCan 的工具来读取捕获的流量、管理 Public URL(隧道)以及发布 Snapshots。LocalCan 必须正在运行,工具才能返回数据,因此请先打开桌面应用或运行 localcan start -d。

工具

服务器暴露了二十六个工具。读取功能开箱即用。十六个会更改内容的工具需要写入权限,该权限默认关闭(见下方开关)。创建或添加 Public URL 需要有效的许可证。发布 Snapshot 和为 URL 添加密码保护需要订阅计划,因此永久许可证会被拒绝,尽管它仍然可以打开 Public URL。未授权时,受限工具会返回明确的激活提示,而暂停、恢复和移除现有 URL 仍然可用。

流量:

工具功能参数
get_status报告捕获是否开启以及缓冲了多少流量。无
enable_capture开启捕获。捕获默认关闭,守护进程重启时会重置。无
list_traffic列出最近的交换记录,最新的在前。last(默认 20)、host 子字符串、project id、method、status(精确代码或类似 5xx 的类别)
get_exchange按 id 返回一条交换记录。id 必填(完整 id 或任意唯一前缀)、format 为 markdown、curl、http、har、json 之一(默认 markdown)、include_response(默认 true)

交换记录是 LocalCan 转发到你后端的请求,而非客户端原始请求的逐字节副本。数据模型见 Traffic。

Public URLs:

工具功能参数
list_services列出 LocalCan 提供的服务,每个服务带有 <project>/<service> 句柄、本地目标和端点数量。无
list_public_urls列出你的 Public URLs,包括已暂停的,每个都带有其状态(active、paused、error、starting、inactive)及其服务内容(live、snapshot、none)。每一行还带有 access:none、password、link 或团队策略名称。停放并服务 Snapshot 的 URL 会显示状态为 paused 但服务内容为 snapshot,因此回答“链接是否在线?”时应依据服务内容而非状态。无
get_public_url_status报告单个 Public URL 的状态、服务内容(live、snapshot、none)及其 access 保护,词汇与列表相同,外加其本地目标和任何请求头规则。url 必填
create_public_url在新项目中为本地端口创建 Public URL,并返回分配的地址,如 my-app-12.localcan.dev。需要几秒钟。如果隧道被拒绝(例如你的计划的 Public URL 限制)或超时,尝试会被回滚,不会留下任何内容。若希望链接在你机器离线后仍可访问,请使用 add_snapshot 添加 Snapshot。若应用以虚拟主机方式服务,请传入 host 和 headers 中的 Host 规则(见下文)。port 必填、name 可选(影响地址格式)、protocol http 或 tcp(默认 http)、host 可选(默认为 localhost)、headers 可选(请求头规则,每条 {name, value, mode?, enabled?})
add_public_url为你已配置的服务添加 Public URL。协议遵循服务的目标,因此 tcp:// 目标会获得 TCP 隧道。失败时回滚行为与创建相同。service 句柄必填
pause_public_url将 Public URL 下线,同时保留其地址,以便稍后恢复。生成的 *.localcan.dev 地址在暂停期间保留 7 天,自定义域名永不过期。url 必填
resume_public_url将暂停的 Public URL 以相同地址恢复上线。url 必填
remove_public_url永久移除 Public URL。生成的地址会被释放,自定义域名仍归你所有,可以再次添加。移除服务的最后一个端点也会移除清空的服务和项目。若想保留地址但停止服务 Snapshot,请使用 remove_snapshot。标记为破坏性操作,因此主机通常会要求确认。url 必填
set_public_url_headers替换 Public URL 上的请求头规则,即 LocalCan 在转发到你的应用之前设置的请求头。传入完整列表,空列表则清除规则。get_public_url_status 以相同格式报告规则(mode 为 set、append 或 remove,以及 enabled),因此读取到的列表可以编辑后写回。url 和 headers 必填

以虚拟主机方式服务的应用(Laravel Herd 或 Valet 站点位于 myapp.test,nginx server_name)需要看到自己的主机名,而 LocalCan 默认转发公共主机名。传入 host 和 Host 规则 headers: [{"name": "Host", "value": "{{target_host}}"}],应用就会服务正确的站点。值模板来自 Headers。

Snapshots(见 Snapshots):

工具功能参数
publish_snapshot将文件夹作为 Snapshot 发布到新的 Public URL 上,使其在你机器离线后仍可访问。尽可能指向构建好的静态输出,或指向项目根目录让 LocalCan 构建(依赖必须已安装)。返回新地址。始终创建新 URL,因此刷新现有预览请使用 update_snapshot。path 必填(绝对路径)、name 可选(影响地址格式)
add_snapshot为你已有的 Public URL 添加 Snapshot,使现有链接在离线时继续服务。如果 URL 已有 Snapshot,则指向 update_snapshot。url 和 path 必填
update_snapshot重新发布 Public URL 上的 Snapshot。省略 path 则从相同来源重新构建,或传入它以指向另一个文件夹。如果 URL 没有 Snapshot,则指向 add_snapshot。url 必填、path 可选
remove_snapshot从 Public URL 移除 Snapshot。URL 保持保留状态,并在隧道在线时继续服务实时内容。标记为破坏性操作。url 必填
get_snapshot_status报告 Public URL 的 Snapshot:其源文件夹、发布时间、源是否自发布以来更改过(stale),以及 URL 当前服务的是实时内容还是快照。还带有其上的评论(状态和计数),以及评论开启后 Snapshot 的版本号。url 必填

访问控制(见 Access control):

工具功能参数
set_password为 Public URL 添加密码保护,只有拥有密码的人才能打开。在 LocalCan 的服务器上强制执行,因此也覆盖该 URL 上的 Snapshot。除非你传入密码,否则会生成强密码并返回以便分享。需要订阅计划。url 必填、password 可选(省略则生成一个)
clear_access移除密码保护,使 URL 重新公开。不会移除 URL 或其 Snapshot。标记为破坏性操作,因此主机通常会要求确认。url 必填
get_access_status报告 Public URL 的保护状态,并在有密码保护时返回当前密码。密码绝不会由 list_public_urls 返回,仅在此处返回。url 必填

评论(审阅者在 Snapshot 上留下的评论,见 Comments):

工具功能参数
list_comments列出 Public URL 的 Snapshot 上的评论线程及其回复。每个线程带有页面路径、锚点(CSS 选择器及该元素中图钉的位置)、审阅者的视口和浏览器,以及评论所在的 Snapshot 版本。绝不会标记任何内容为已读。url 必填、status open、resolved 或 all(默认 open)、page 路径、version 数字
reply_comment以你账户的名义向线程发布回复。线程上的审阅者会通过电子邮件收到回复,除非团队的回复通知已关闭或他们已退订。仅限回复,新线程在页面上固定。url、comment_id、body 必填
resolve_comment将线程标记为已解决,包括回复。url 和 comment_id 必填
reopen_comment重新打开已解决的线程。url 和 comment_id 必填
set_comments切换 Snapshot 上的评论:on、paused(现有线程保持可读,不接受新线程)或 off。需要受保护的 URL 和订阅计划。url 和 state 必填

反馈循环

这些工具串联成一个代理可以自行运行的循环:list_comments 读取打开的线程,编辑源代码,update_snapshot 发布新版本,然后对每个线程执行 reply_comment 和 resolve_comment。评论会延续到新版本,因此审阅者会在同一图钉上看到回复。服务器会自行告知代理这一点。其 MCP 指令(主机将其添加到代理的提示中)描述了该循环、审阅轮次设置(publish_snapshot、set_password、set_comments)以及虚拟主机配方。代理无法做两件事:启动线程(审阅者在页面上固定)和将线程标记为已读(未读是你应用中的个人收件箱状态)。

连接代理

连接方式取决于代理的运行方式。终端代理(Claude Code、Codex)继承你的 shell PATH,因此裸的 localcan 命令即可。GUI 应用(Cursor、Claude Desktop、VS Code 等)不会加载你的 shell PATH,因此它们需要二进制的绝对路径,例如 /Users/you/.localcan/bin/localcan。桌面应用的设置可以复制一份已填好正确路径的现成配置,这也是 Windows 上的可靠途径。

Claude Code

claude mcp add --scope user localcan -- localcan mcp

标志 --scope user 为每个项目注册服务器。去掉它则仅在当前项目中注册。

Codex

codex mcp add localcan -- localcan mcp

这会将服务器写入 ~/.codex/config.toml。对于 Codex 桌面应用或 IDE 扩展,请传入绝对路径代替 localcan。

Cursor、Claude Desktop 和 Windsurf

它们共享相同的 mcpServers 格式:

{
  "mcpServers": {
    "localcan": {
      "command": "/Users/you/.localcan/bin/localcan",
      "args": ["mcp"]
    }
  }
}

将其添加到正确的文件中,然后重新加载:

  • Cursor:~/.cursor/mcp.json,然后在设置中启用服务器。
  • Claude Desktop:claude_desktop_config.json(设置、开发者、编辑配置),然后退出并重新启动。
  • Windsurf:~/.codeium/windsurf/mcp_config.json,然后刷新 MCP 面板。

VS Code

VS Code(Copilot 代理模式)使用带有显式类型的 servers 键。将其添加到工作区中的 .vscode/mcp.json:

{
  "servers": {
    "localcan": {
      "type": "stdio",
      "command": "/Users/you/.localcan/bin/localcan",
      "args": ["mcp"]
    }
  }
}

你也可以使用相同的服务器对象运行 code --add-mcp。

Zed

Zed 在其 settings.json 中使用 context_servers:

{
  "context_servers": {
    "localcan": {
      "source": "custom",
      "command": "/Users/you/.localcan/bin/localcan",
      "args": ["mcp"]
    }
  }
}

你也可以从 Agent Panel 设置中添加它。

代理访问、编辑和写入权限

这三项都在桌面应用的设置(“AI Agents (MCP)”部分)中控制,或从终端控制:localcan mcp enable / disable 用于代理访问,localcan mcp redact <on|off> 用于编辑,localcan mcp access <read_only|read_write> 用于写入权限,localcan mcp status 用于查看当前状态。

  • 代理访问默认开启。关闭后,代理将完全无法使用 LocalCan。服务器仍会启动,但每个工具都会返回明确的“访问已禁用”消息,直到您重新开启。
  • 对代理默认启用脱敏。敏感标头(Authorization、cookies、API 密钥)会从工具响应中移除。URL 和请求体不会脱敏。关闭后,您自己的代理可以接收原始值。
  • 写入访问默认关闭。读取无需写入访问即可工作,但写入工具会返回明确的只读消息,直到您在应用中(“允许代理创建和更改公共 URL”)或通过 localcan mcp access read_write 开启。开启代理访问并不会授予写入访问权限。它们是两个独立的开关。每次写入调用都会记录到服务器的诊断输出中,由您的主机捕获,因此您可以记录代理更改的内容。传递给 set_password 的密码会在该日志中被掩码。

当工具拒绝时

  • 每个工具都会因守护进程连接消息而报错:LocalCan 未运行。请打开桌面应用或运行 localcan start -d。
  • list_traffic 返回空内容:捕获已关闭(默认关闭,守护进程重启时会重置)。运行 localcan traffic enable 或让代理调用 enable_capture。
  • “MCP 访问已禁用”:代理访问已关闭。运行 localcan mcp enable 或切换设置开关。
  • “MCP 为只读”:该工具会更改内容,但写入访问已关闭。运行 localcan mcp access read_write 或打开设置开关。
  • “公共 URL 需要许可证”:创建和添加公共 URL 需要有效的许可证。请在应用中激活,或使用 localcan license activate <key> 激活。
  • “需要订阅计划”:快照和访问控制仅限订阅用户。永久许可证可以打开公共 URL,但不能发布快照或设置密码。请从您的 仪表板 订阅,然后重试。
  • “已有快照”或“尚无快照”:请使用消息中提到的工具。add_snapshot 将快照附加到没有快照的 URL,update_snapshot 刷新已有快照的 URL。
  • “已达到快照限制”:您的计划限制了同时提供快照的公共 URL 数量。消息会列出已占用槽位的 URL,您可以使用 update_snapshot 刷新这些 URL,而不是发布新的快照。
  • “评论需要受保护的 URL”:set_comments 在没有访问控制的 URL 上被调用。请先运行 set_password。
  • “您的账户没有显示名称”:回复需要名称才能发布。请在 仪表板 中设置,或在应用中作为所有者打开快照页面后,在快照页面上回复一次。
  • 主机显示服务器失败或没有工具:GUI 应用无法在 PATH 中找到 localcan。请使用绝对路径,最简单的方法是通过设置中的复制配置。