LocalCan
官方為AI代理提供localhost的公開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,因此請根據 serving 而非 state 來回答「連結是否上線?」。 | 無 |
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 隧道。失敗時的回滾與 create 相同。 | 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 | 將資料夾發布為新 Public URL 上的 Snapshot,使其在您的機器離線後仍可存取。盡可能指向建置後的靜態輸出,或指向專案根目錄讓 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 會保留,並在隧道開啟時繼續提供 live 內容。標記為破壞性。 | url 必填 |
get_snapshot_status | 回報 Public URL 的 Snapshot:其來源資料夾、發布時間、來源是否自那時起變更(stale),以及 URL 目前提供 live 還是 snapshot。也帶有評論(狀態和數量),以及評論開啟後的 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 path、version number |
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。桌面應用程式的 Settings 可以複製一份已填入正確路徑的現成設定,這在 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,然後在 Settings 中啟用伺服器。 - Claude Desktop:
claude_desktop_config.json(Settings、Developer、Edit Config),然後結束並重新啟動。 - Windsurf:
~/.codeium/windsurf/mcp_config.json,然後重新整理 MCP 面板。
VS Code
VS Code(Copilot agent mode)使用帶有明確類型的 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 設定中新增。
代理程式存取、編輯和寫入權限
三者都在桌面應用程式的 Settings(「AI Agents (MCP)」區段)中控制,或從終端:localcan mcp enable / disable 用於代理程式存取、localcan mcp redact <on|off> 用於編輯、localcan mcp access <read_only|read_write> 用於寫入權限,以及 localcan mcp status 檢視目前狀態。
- 代理存取預設為開啟。將其關閉可完全阻止代理使用 LocalCan。伺服器仍會啟動,但每個工具都會回傳明確的「存取已停用」訊息,直到您重新開啟為止。
- 編輯(Redaction)預設對代理啟用。敏感標頭(Authorization、cookies、API 金鑰)會從工具回應中移除。URL 和內文不會被編輯。將其關閉可讓您自己的代理接收原始值。
- 寫入存取預設為關閉。讀取不需寫入存取即可運作,但寫入工具會回傳明確的唯讀訊息,直到您在應用程式中開啟(「允許代理建立和變更 Public URLs」)或使用
localcan mcp access read_write開啟為止。開啟代理存取不會授予寫入存取權限。它們是獨立的開關。每次寫入呼叫都會記錄到伺服器的診斷輸出,您的主機可擷取該輸出,因此您會有代理變更內容的記錄。傳遞給set_password的密碼會在該記錄中遮罩。
當工具拒絕時
- 每個工具都會因守護程式連線訊息而報錯:LocalCan 未在執行。請開啟桌面應用程式或執行
localcan start -d。 list_traffic回傳空值:擷取已關閉(預設為關閉,且守護程式重新啟動時會重設)。請執行localcan traffic enable或讓代理呼叫enable_capture。- 「MCP access is disabled」:代理存取已關閉。請執行
localcan mcp enable或切換 Settings 中的開關。 - 「MCP is read-only」:該工具會變更內容,但寫入存取已關閉。請執行
localcan mcp access read_write或開啟 Settings 中的開關。 - 「public URLs require a license」:建立和新增 Public URL 需要有效的授權。請在應用程式中啟用授權,或使用
localcan license activate <key>。 - 「need a subscription plan」:Snapshots 和 Access control 僅限訂閱方案。永久授權可開啟 Public URLs,但無法發佈 Snapshot 或設定密碼。請從您的 dashboard 訂閱,然後重試。
- 「already has a snapshot」或「has no snapshot yet」:請使用訊息中指名的工具。
add_snapshot會將 Snapshot 附加到沒有 Snapshot 的 URL,update_snapshot會重新整理已有 Snapshot 的 URL。 - 「Snapshot limit reached」:您的方案限制了可同時提供 Snapshot 的 Public URLs 數量。訊息會列出已使用插槽的 URL,您可以用
update_snapshot重新整理這些 URL,而不是發佈新的。 - 「Comments need a protected URL」:
set_comments是在沒有 Access control 的 URL 上呼叫。請先執行set_password。 - 「Your account has no display name」:回覆需要名稱才能發佈。請在 dashboard 中設定,或在應用程式中以擁有者身分開啟 Snapshot 頁面後,在該頁面上回覆一次。
- 主機顯示伺服器失敗或沒有工具:GUI 應用程式在 PATH 中找不到
localcan。請使用絕對路徑,最簡單的方式是透過 Settings 中的複製設定。