LocalCan
offiziellGibt KI-Agenten öffentliche URLs (Tunnel) für localhost, Live-HTTP-Datenverkehrsinspektion, Snapshot-Veröffentlichung und Zugriffskontrolle.
Was kann man mit LocalCan MCP machen?
- Erfassten Datenverkehr prüfen — Bitten Sie Ihren Assistenten, aktuelle Austauschvorgänge mit
list_trafficaufzulisten oder eine vollständige Anfrage/Antwort überget_exchangeim Markdown-, curl- oder HAR-Format abzurufen. - Öffentliche Tunnel verwalten — Erstellen, pausieren, fortsetzen oder entfernen Sie öffentliche URLs mit Tools wie
create_public_urlundpause_public_url, einschließlich der Festlegung benutzerdefinierter Anfrage-Header. - Snapshots veröffentlichen und aktualisieren — Stellen Sie einen Ordner als teilbaren Snapshot mit
publish_snapshotbereit und aktualisieren Sie ihn später mitupdate_snapshot, damit Vorschau-Links aktuell bleiben. - Zugriff und Kommentare steuern — Schützen Sie eine URL mit einem Passwort über
set_password, prüfen Sie Kommentarthreads überlist_commentsund antworten Sie darauf oder lösen Sie sie direkt über Ihren Assistenten auf. - Tunnel- und Dienststatus prüfen — Verwenden Sie
get_status, um zu bestätigen, dass die Erfassung läuft, oderlist_public_urls, um zu sehen, welche Links aktiv, pausiert oder als Snapshots bereitgestellt sind.
Dokumentation
MCP-Server
Führen Sie den Model Context Protocol Server von LocalCan aus und binden Sie ihn in Ihren MCP-Host ein, mit einer vollständigen Referenz der Tools und Schalter.
localcan mcp führt einen Model Context Protocol Server über stdio aus. Ein MCP-Host (Claude Code, Codex, Cursor, Claude Desktop und andere) startet ihn und ruft die Tools von LocalCan auf, um erfassten Datenverkehr zu lesen, Public URLs (Tunnel) zu verwalten und Snapshots zu veröffentlichen. LocalCan muss ausgeführt werden, damit die Tools Daten zurückgeben. Öffnen Sie daher zuerst die Desktop-App oder führen Sie localcan start -d aus.
Tools
Der Server stellt sechsundzwanzig Tools bereit. Das Lesen funktioniert sofort. Die sechzehn Tools, die Dinge verändern, benötigen Schreibzugriff, der standardmäßig deaktiviert ist (siehe die Schalter unten). Das Erstellen oder Hinzufügen einer Public URL erfordert eine aktive Lizenz. Das Veröffentlichen eines Snapshots und das Schützen einer URL mit einem Passwort erfordern einen Abonnementplan. Eine unbefristete Lizenz wird daher abgelehnt, auch wenn sie weiterhin Public URLs öffnen kann. Ohne Lizenz geben die gesperrten Tools eine klare Aktivierungsmeldung zurück, während das Anhalten, Fortsetzen und Entfernen vorhandener URLs weiterhin funktioniert.
Datenverkehr:
| Tool | Funktion | Parameter |
|---|---|---|
get_status | Meldet, ob die Erfassung aktiv ist und wie viel Datenverkehr gepuffert ist. | keine |
enable_capture | Aktiviert die Erfassung. Die Erfassung ist standardmäßig deaktiviert und wird beim Neustart des Daemons zurückgesetzt. | keine |
list_traffic | Listet aktuelle Austausche auf, neueste zuerst. | last (Standard 20), host Teilzeichenfolge, project ID, method, status (exakter Code oder eine Klasse wie 5xx) |
get_exchange | Gibt einen Austausch anhand der ID zurück. | id erforderlich (vollständige ID oder ein beliebiges eindeutiges Präfix), format einer von markdown, curl, http, har, json (Standard markdown), include_response (Standard true) |
Ein Austausch ist die Anfrage, die LocalCan an Ihr Backend weitergeleitet hat, keine bytegenaue Kopie der ursprünglichen Anfrage des Clients. Siehe Datenverkehr für das Datenmodell.
Public URLs:
| Tool | Funktion | Parameter |
|---|---|---|
list_services | Listet die Dienste auf, die LocalCan bereitstellt, jeweils mit einem <project>/<service>-Handle, seinem lokalen Ziel und der Anzahl der Endpunkte. | keine |
list_public_urls | Listet Ihre Public URLs auf, einschließlich angehaltener, jeweils mit ihrem Status (aktiv, angehalten, Fehler, startend, inaktiv) und was sie bereitstellt (live, Snapshot, keine). Jede Zeile enthält auch access: keine, Passwort, Link oder einen Team-Richtliniennamen. Eine geparkte URL, die einen Snapshot bereitstellt, liest Status angehalten, aber bereitstellt Snapshot. Beantworten Sie also „Ist der Link aktiv?" anhand von bereitstellt, nicht von Status. | keine |
get_public_url_status | Meldet den Status einer Public URL, was sie bereitstellt (live, Snapshot, keine) und ihren access-Schutz, mit demselben Vokabular wie die Liste, plus ihr lokales Ziel und alle Anforderungs-Header-Regeln. | url erforderlich |
create_public_url | Erstellt eine Public URL für einen lokalen Port in einem neuen Projekt und gibt die zugewiesene Adresse zurück, wie my-app-12.localcan.dev. Dauert einige Sekunden. Wenn der Tunnel abgelehnt wird (z. B. das Public-URL-Limit Ihres Plans) oder ein Timeout auftritt, wird der Versuch zurückgerollt und nichts bleibt zurück. Für einen Link, der erreichbar bleibt, nachdem Ihre Maschine offline geht, fügen Sie einen Snapshot mit add_snapshot hinzu. Für eine App, die als virtueller Host bereitgestellt wird, übergeben Sie host und eine Host-Regel in headers (siehe unten). | port erforderlich, name optional (formt die Adresse), protocol http oder tcp (Standard http), host optional (Standard localhost), headers optional (Anforderungs-Header-Regeln, jeweils {name, value, mode?, enabled?}) |
add_public_url | Fügt eine Public URL zu einem Dienst hinzu, den Sie bereits konfiguriert haben. Das Protokoll folgt dem Ziel des Dienstes, sodass ein tcp://-Ziel einen TCP-Tunnel erhält. Gleicher Rollback bei Fehler wie beim Erstellen. | service Handle erforderlich |
pause_public_url | Nimmt eine Public URL offline, während ihre Adresse erhalten bleibt, sodass sie später fortgesetzt werden kann. Eine generierte *.localcan.dev-Adresse bleibt 7 Tage lang reserviert, während sie angehalten ist. Benutzerdefinierte Domains laufen nie ab. | url erforderlich |
resume_public_url | Bringt eine angehaltene Public URL unter derselben Adresse wieder online. | url erforderlich |
remove_public_url | Entfernt eine Public URL dauerhaft. Eine generierte Adresse wird freigegeben, eine benutzerdefinierte Domain bleibt Ihre und kann erneut hinzugefügt werden. Das Entfernen des letzten Endpunkts eines Dienstes entfernt auch den geleerten Dienst und das Projekt. Um die Adresse zu behalten, aber die Bereitstellung eines Snapshots zu stoppen, verwenden Sie remove_snapshot. Als destruktiv markiert, sodass Hosts normalerweise um Bestätigung bitten. | url erforderlich |
set_public_url_headers | Ersetzt die Anforderungs-Header-Regeln auf einer Public URL, die Header, die LocalCan vor der Weiterleitung an Ihre App setzt. Übergeben Sie die vollständige Liste, eine leere Liste löscht sie. get_public_url_status meldet die Regeln in derselben Form (mode setzen, anhängen oder entfernen, und enabled), sodass eine dort gelesene Liste bearbeitet und zurückgeschrieben werden kann. | url und headers erforderlich |
Eine App, die als virtueller Host bereitgestellt wird (eine Laravel-Herd- oder Valet-Site unter myapp.test, ein nginx server_name), muss ihren eigenen Hostnamen sehen, und LocalCan leitet den öffentlichen Hostnamen standardmäßig weiter. Übergeben Sie host und eine Host-Regel, headers: [{"name": "Host", "value": "{{target_host}}"}], und die App stellt die richtige Site bereit. Die Wertvorlagen sind die aus Header.
Snapshots (siehe Snapshots):
| Tool | Funktion | Parameter |
|---|---|---|
publish_snapshot | Veröffentlicht einen Ordner als Snapshot auf einer neuen Public URL, sodass er erreichbar bleibt, nachdem Ihre Maschine offline geht. Zeigen Sie darauf, wenn möglich, auf gebaute statische Ausgabe oder auf ein Projektstammverzeichnis, damit LocalCan baut (Abhängigkeiten müssen bereits installiert sein). Gibt die neue Adresse zurück. Erstellt immer eine neue URL. Verwenden Sie zum Aktualisieren einer vorhandenen Vorschau update_snapshot. | path erforderlich (absolut), name optional (formt die Adresse) |
add_snapshot | Fügt einer vorhandenen Public URL einen Snapshot hinzu, sodass ein vorhandener Link weiterhin offline bereitstellt. Zeigt auf update_snapshot, wenn die URL bereits einen hat. | url und path erforderlich |
update_snapshot | Veröffentlicht den Snapshot auf einer Public URL erneut. Lassen Sie path weg, um aus derselben Quelle neu zu bauen, oder übergeben Sie es, um auf einen anderen Ordner zu zeigen. Zeigt auf add_snapshot, wenn die URL keinen hat. | url erforderlich, path optional |
remove_snapshot | Entfernt den Snapshot von einer Public URL. Die URL bleibt reserviert und stellt weiterhin live bereit, während Ihr Tunnel aktiv ist. Als destruktiv markiert. | url erforderlich |
get_snapshot_status | Meldet den Snapshot einer Public URL: seinen Quellordner, wann er veröffentlicht wurde, ob sich die Quelle seitdem geändert hat (veraltet) und ob die URL gerade live oder den Snapshot bereitstellt. Enthält auch die Überprüfungskommentare (Status und Anzahl) und, sobald Kommentare aktiv waren, die Versionsnummer des Snapshots. | url erforderlich |
Zugriffskontrolle (siehe Zugriffskontrolle):
| Tool | Funktion | Parameter |
|---|---|---|
set_password | Schützt eine Public URL mit einem Passwort, sodass nur Personen mit dem Passwort sie öffnen können. Wird auf den Servern von LocalCan durchgesetzt und deckt daher auch einen Snapshot auf dieser URL ab. Generiert ein starkes Passwort, sofern Sie keins übergeben, und gibt es zurück, damit Sie es teilen können. Erfordert einen Abonnementplan. | url erforderlich, password optional (weglassen, um eines zu generieren) |
clear_access | Entfernt den Passwortschutz und macht die URL wieder öffentlich. Entfernt nicht die URL oder ihren Snapshot. Als destruktiv markiert, sodass Hosts normalerweise um Bestätigung bitten. | url erforderlich |
get_access_status | Meldet den Schutz einer Public URL und gibt ihr aktuelles Passwort zurück, wenn sie passwortgeschützt ist. Das Passwort wird nie von list_public_urls zurückgegeben, nur hier. | url erforderlich |
Kommentare (die Überprüfungskommentare, die Prüfer auf einem Snapshot hinterlassen, siehe Kommentare):
| Tool | Funktion | Parameter |
|---|---|---|
list_comments | Listet die Kommentarthreads auf dem Snapshot einer Public URL mit ihren Antworten auf. Jeder Thread enthält den Seitenpfad, den Anker (einen CSS-Selektor und die Position des Pins in diesem Element), den Viewport und Browser des Prüfers und die Snapshot-Version, auf der er hinterlassen wurde. Markiert nie etwas als gelesen. | url erforderlich, status offen, gelöst oder alle (Standard offen), page Pfad, version Nummer |
reply_comment | Postet eine Antwort in einen Thread unter dem Namen Ihres Kontos. Prüfer im Thread erhalten sie per E-Mail, es sei denn, Antwortbenachrichtigungen sind für das Team deaktiviert oder sie haben sich abgemeldet. Nur Antworten, neue Threads werden auf der Seite gepinnt. | url, comment_id, body erforderlich |
resolve_comment | Markiert einen Thread als gelöst, einschließlich Antworten. | url und comment_id erforderlich |
reopen_comment | Öffnet einen gelösten Thread erneut. | url und comment_id erforderlich |
set_comments | Schaltet Kommentare auf einem Snapshot um: ein, angehalten (vorhandene Threads bleiben lesbar, keine neuen) oder aus. Erfordert eine geschützte URL und einen Abonnementplan. | url und state erforderlich |
Die Feedback-Schleife
Die Tools verketten sich zu einer Schleife, die ein Agent selbst ausführen kann: list_comments, um die offenen Threads zu lesen, die Quelle bearbeiten, update_snapshot, um die neue Version zu veröffentlichen, dann reply_comment und resolve_comment pro Thread. Kommentare werden auf die neue Version übertragen, sodass der Prüfer die Antwort auf demselben Pin sieht. Der Server teilt dies dem Agenten selbst mit. Seine MCP-Anweisungen, die Hosts zum Prompt des Agenten hinzufügen, beschreiben die Schleife, das Überprüfungsrunden-Setup (publish_snapshot, set_password, set_comments) und das Rezept für virtuelle Hosts. Zwei Dinge, die ein Agent nicht tun kann: einen Thread starten (Prüfer pinnen diese auf der Seite) und Threads als gelesen markieren (ungelesen ist Ihr eigener Posteingangsstatus in der App).
Verbinden eines Agenten
Wie Sie verbinden, hängt davon ab, wie der Agent ausgeführt wird. Terminal-Agenten (Claude Code, Codex) erben den PATH Ihrer Shell, sodass ein einfacher localcan-Befehl funktioniert. GUI-Apps (Cursor, Claude Desktop, VS Code und andere) laden den PATH Ihrer Shell nicht, daher benötigen sie den absoluten Pfad zur Binärdatei, z. B. /Users/you/.localcan/bin/localcan. Die Einstellungen der Desktop-App können eine vorgefertigte Konfiguration mit dem richtigen Pfad kopieren, was auch auf Windows der zuverlässige Weg ist.
Claude Code
claude mcp add --scope user localcan -- localcan mcp
Das Flag --scope user registriert den Server für jedes Projekt. Lassen Sie es weg, um ihn nur im aktuellen Projekt zu registrieren.
Codex
codex mcp add localcan -- localcan mcp
Dies schreibt den Server nach ~/.codex/config.toml. Für die Codex-Desktop-App oder IDE-Erweiterung übergeben Sie den absoluten Pfad anstelle von localcan.
Cursor, Claude Desktop und Windsurf
Diese teilen sich dasselbe mcpServers-Format:
{
"mcpServers": {
"localcan": {
"command": "/Users/you/.localcan/bin/localcan",
"args": ["mcp"]
}
}
}
Fügen Sie es zur richtigen Datei hinzu und laden Sie dann neu:
- Cursor:
~/.cursor/mcp.json, dann aktivieren Sie den Server in den Einstellungen. - Claude Desktop:
claude_desktop_config.json(Einstellungen, Entwickler, Konfiguration bearbeiten), dann beenden und neu starten. - Windsurf:
~/.codeium/windsurf/mcp_config.json, dann das MCP-Panel aktualisieren.
VS Code
VS Code (Copilot-Agentenmodus) verwendet einen servers-Schlüssel mit einem expliziten Typ. Fügen Sie dies zu .vscode/mcp.json in Ihrem Arbeitsbereich hinzu:
{
"servers": {
"localcan": {
"type": "stdio",
"command": "/Users/you/.localcan/bin/localcan",
"args": ["mcp"]
}
}
}
Sie können auch code --add-mcp mit demselben Serverobjekt ausführen.
Zed
Zed verwendet context_servers in seiner settings.json:
{
"context_servers": {
"localcan": {
"source": "custom",
"command": "/Users/you/.localcan/bin/localcan",
"args": ["mcp"]
}
}
}
Sie können es auch aus den Einstellungen des Agent-Panels hinzufügen.
Agentenzugriff, Schwärzung und Schreibzugriff
Alle drei werden in der Desktop-App unter Einstellungen (Abschnitt „AI Agents (MCP)") gesteuert oder vom Terminal aus: localcan mcp enable / disable für den Agentenzugriff, localcan mcp redact <on|off> für die Schwärzung, localcan mcp access <read_only|read_write> für den Schreibzugriff und localcan mcp status, um den aktuellen Zustand zu sehen.
- Der Agentenzugriff ist standardmäßig aktiviert. Deaktivieren Sie ihn, um Agenten die Nutzung von LocalCan vollständig zu untersagen. Der Server startet weiterhin, aber jedes Tool gibt eine klare Meldung „Zugriff deaktiviert" zurück, bis Sie ihn wieder aktivieren.
- Die Schwärzung ist für Agenten standardmäßig aktiviert. Sensible Header (Authorization, Cookies, API-Schlüssel) werden aus Tool-Antworten entfernt. URLs und Inhalte werden nicht geschwärzt. Deaktivieren Sie sie, damit Ihr eigener Agent Rohwerte empfangen kann.
- Der Schreibzugriff ist standardmäßig deaktiviert. Das Lesen funktioniert ohne ihn, aber die Schreib-Tools geben eine klare Nur-Lese-Meldung zurück, bis Sie ihn in der App aktivieren („Agenten erlauben, öffentliche URLs zu erstellen und zu ändern") oder mit
localcan mcp access read_write. Das Aktivieren des Agentenzugriffs gewährt keinen Schreibzugriff. Es sind separate Schalter. Jeder Schreibaufruf wird im Diagnoseausgang des Servers protokolliert, den Ihr Host erfasst, sodass Sie eine Aufzeichnung darüber haben, was ein Agent geändert hat. Ein anset_passwordübergebenes Passwort wird in diesem Protokoll maskiert.
Wenn ein Tool sich weigert
- Jedes Tool meldet einen Fehler mit einer Daemon-Verbindungsmeldung: LocalCan läuft nicht. Öffnen Sie die Desktop-App oder führen Sie
localcan start -daus. list_trafficgibt nichts zurück: Die Erfassung ist deaktiviert (standardmäßig deaktiviert und wird beim Neustart des Daemons zurückgesetzt). Führen Sielocalcan traffic enableaus oder lassen Sie den Agentenenable_captureaufrufen.- „MCP-Zugriff deaktiviert": Der Agentenzugriff ist ausgeschaltet. Führen Sie
localcan mcp enableaus oder schalten Sie den Schalter in den Einstellungen um. - „MCP ist schreibgeschützt": Das Tool ändert Dinge und der Schreibzugriff ist deaktiviert. Führen Sie
localcan mcp access read_writeaus oder aktivieren Sie den Schalter in den Einstellungen. - „Öffentliche URLs erfordern eine Lizenz": Das Erstellen und Hinzufügen einer öffentlichen URL erfordert eine aktive Lizenz. Aktivieren Sie eine in der App oder mit
localcan license activate <key>. - „Ein Abonnementplan ist erforderlich": Snapshots und Zugriffskontrolle sind nur mit Abonnement verfügbar. Eine unbefristete Lizenz kann öffentliche URLs öffnen, aber keinen Snapshot veröffentlichen oder ein Passwort festlegen. Abonnieren Sie über Ihr Dashboard und versuchen Sie es dann erneut.
- „Hat bereits einen Snapshot" oder „Hat noch keinen Snapshot": Verwenden Sie das Tool, das in der Meldung genannt wird.
add_snapshotfügt einer URL ohne Snapshot einen Snapshot hinzu,update_snapshotaktualisiert einen, der bereits einen hat. - „Snapshot-Limit erreicht": Ihr Plan begrenzt, wie viele öffentliche URLs gleichzeitig einen Snapshot bereitstellen können. Die Meldung listet die URLs auf, die bereits einen Platz belegen, die Sie mit
update_snapshotaktualisieren können, anstatt einen neuen zu veröffentlichen. - „Kommentare erfordern eine geschützte URL":
set_commentswurde für eine URL ohne Zugriffskontrolle aufgerufen. Führen Sie zuerstset_passwordaus. - „Ihr Konto hat keinen Anzeigenamen": Eine Antwort benötigt einen Namen, unter dem sie veröffentlicht wird. Legen Sie ihn im Dashboard fest oder antworten Sie einmal auf der Snapshot-Seite, nachdem Sie sie als Eigentümer aus der App geöffnet haben.
- Der Host zeigt den Server als fehlgeschlagen oder ohne Tools an: Eine GUI-App kann
localcannicht im PATH finden. Verwenden Sie den absoluten Pfad, am einfachsten über die Schaltfläche „Konfiguration kopieren" in den Einstellungen.