LocalCan
oficialProporciona a los agentes de IA URLs públicas (túneles) para localhost, inspección de tráfico HTTP en vivo, publicación de instantáneas y control de acceso.
¿Qué puedes hacer con LocalCan MCP?
- Inspeccionar tráfico capturado — Pídele a tu asistente que liste intercambios recientes con
list_traffico que obtenga una solicitud/respuesta completa medianteget_exchangeen formato markdown, curl o HAR. - Gestionar túneles públicos — Crea, pausa, reanuda o elimina URLs públicas con herramientas como
create_public_urlypause_public_url, incluyendo la configuración de encabezados de solicitud personalizados. - Publicar y actualizar instantáneas — Implementa una carpeta como una instantánea compartible con
publish_snapshoty luego actualízala más tarde conupdate_snapshotpara que los enlaces de vista previa se mantengan al día. - Controlar acceso y comentarios — Protege con contraseña una URL usando
set_password, revisa hilos de comentarios mediantelist_commentsy responde o resuélvelos directamente desde tu asistente. - Verificar el estado del túnel y del servicio — Usa
get_statuspara confirmar que la captura está en ejecución, olist_public_urlspara ver qué enlaces están activos, pausados o sirviendo instantáneas.
Documentación
Servidor MCP
Ejecuta el servidor del Protocolo de Contexto de Modelos (MCP) de LocalCan y conéctalo a tu host MCP, con una referencia completa de las herramientas y opciones.
localcan mcp ejecuta un servidor del Protocolo de Contexto de Modelos a través de stdio. Un host MCP (Claude Code, Codex, Cursor, Claude Desktop y otros) lo inicia y llama a las herramientas de LocalCan para leer el tráfico capturado, gestionar URLs públicas (túneles) y publicar Snapshots. LocalCan debe estar en ejecución para que las herramientas devuelvan datos, así que abre la aplicación de escritorio o ejecuta localcan start -d primero.
Herramientas
El servidor expone veintiséis herramientas. La lectura funciona sin configuración adicional. Las dieciséis herramientas que modifican cosas necesitan acceso de escritura, que está desactivado por defecto (consulta las opciones a continuación). Crear o añadir una URL pública requiere una licencia activa. Publicar un Snapshot y proteger con contraseña una URL requieren un plan de suscripción, por lo que una licencia perpetua es rechazada aunque aún pueda abrir URLs públicas. Sin licencia, las herramientas restringidas devuelven un mensaje de activación claro, mientras que pausar, reanudar y eliminar URLs existentes sigue funcionando.
Tráfico:
| Herramienta | Qué hace | Parámetros |
|---|---|---|
get_status | Informa si la captura está activada y cuánto tráfico está almacenado en el búfer. | ninguno |
enable_capture | Activa la captura. La captura está desactivada por defecto y se restablece cuando el daemon se reinicia. | ninguno |
list_traffic | Lista los intercambios recientes, del más nuevo al más antiguo. | last (por defecto 20), host subcadena, project id, method, status (código exacto o una clase como 5xx) |
get_exchange | Devuelve un intercambio por id. | id obligatorio (id completo o cualquier prefijo único), format uno de markdown, curl, http, har, json (por defecto markdown), include_response (por defecto true) |
Un intercambio es la solicitud que LocalCan reenvió a tu backend, no una copia byte a byte de la solicitud original del cliente. Consulta Tráfico para el modelo de datos.
URLs públicas:
| Herramienta | Qué hace | Parámetros |
|---|---|---|
list_services | Lista los servicios que LocalCan sirve, cada uno con un identificador <project>/<service>, su destino local y el número de endpoints. | ninguno |
list_public_urls | Lista tus URLs públicas, incluidas las pausadas, cada una con su estado (activa, pausada, error, iniciando, inactiva) y lo que sirve (en vivo, snapshot, ninguno). Cada fila también lleva access: ninguno, contraseña, enlace o un nombre de política de equipo. Una URL estacionada que sirve un Snapshot se lee como estado pausado pero sirviendo snapshot, así que responde "¿está el enlace activo?" según lo que sirve, no según el estado. | ninguno |
get_public_url_status | Informa el estado de una URL pública, lo que sirve (en vivo, snapshot, ninguno) y su protección access, con el mismo vocabulario que la lista, más su destino local y cualquier regla de encabezados de solicitud. | url obligatorio |
create_public_url | Crea una URL pública para un puerto local en un nuevo proyecto y devuelve la dirección asignada, como my-app-12.localcan.dev. Tarda unos segundos. Si el túnel es rechazado (por ejemplo, el límite de URLs públicas de tu plan) o se agota el tiempo, el intento se revierte y no queda nada. Para un enlace que siga siendo accesible después de que tu máquina se desconecte, añade un Snapshot con add_snapshot. Para una aplicación servida como host virtual, pasa host y una regla de Host en headers (ver más abajo). | port obligatorio, name opcional (da forma a la dirección), protocol http o tcp (por defecto http), host opcional (por defecto localhost), headers opcional (reglas de encabezados de solicitud, cada {name, value, mode?, enabled?}) |
add_public_url | Añade una URL pública a un servicio que ya tienes configurado. El protocolo sigue el destino del servicio, así que un destino tcp:// obtiene un túnel TCP. Misma reversión en caso de fallo que crear. | service identificador obligatorio |
pause_public_url | Desconecta una URL pública manteniendo su dirección, para que pueda reanudarse más tarde. Una dirección generada *.localcan.dev permanece reservada durante 7 días mientras está pausada; los dominios personalizados nunca expiran. | url obligatorio |
resume_public_url | Vuelve a poner en línea una URL pública pausada en la misma dirección. | url obligatorio |
remove_public_url | Elimina permanentemente una URL pública. Una dirección generada se libera, un dominio personalizado sigue siendo tuyo y puede añadirse de nuevo. Eliminar el último endpoint de un servicio también elimina el servicio y el proyecto vaciados. Para mantener la dirección pero dejar de servir un Snapshot, usa remove_snapshot. Marcada como destructiva, por lo que los hosts suelen pedir confirmación. | url obligatorio |
set_public_url_headers | Reemplaza las reglas de encabezados de solicitud en una URL pública, los encabezados que LocalCan establece antes de reenviar a tu aplicación. Pasa la lista completa; una lista vacía las borra. get_public_url_status informa las reglas en la misma forma (mode establecer, añadir o eliminar, y enabled), así que una lista leída allí puede editarse y escribirse de vuelta. | url y headers obligatorios |
Una aplicación servida como host virtual (un sitio de Laravel Herd o Valet en myapp.test, un server_name de nginx) necesita ver su propio nombre de host, y LocalCan reenvía el nombre de host público por defecto. Pasa host y una regla de Host, headers: [{"name": "Host", "value": "{{target_host}}"}], y la aplicación sirve el sitio correcto. Las plantillas de valores son las de Encabezados.
Snapshots (ver Snapshots):
| Herramienta | Qué hace | Parámetros |
|---|---|---|
publish_snapshot | Publica una carpeta como Snapshot en una nueva URL pública, para que siga siendo accesible después de que tu máquina se desconecte. Apúntala a la salida estática compilada cuando puedas, o a la raíz del proyecto para que LocalCan la compile (las dependencias ya deben estar instaladas). Devuelve la nueva dirección. Siempre crea una nueva URL, así que para actualizar una vista previa existente usa update_snapshot. | path obligatorio (absoluto), name opcional (da forma a la dirección) |
add_snapshot | Añade un Snapshot a una URL pública que ya tienes, para que un enlace existente siga sirviendo sin conexión. Apunta a update_snapshot si la URL ya tiene uno. | url y path obligatorios |
update_snapshot | Vuelve a publicar el Snapshot en una URL pública. Omite path para reconstruir desde la misma fuente, o pásalo para reorientar a otra carpeta. Apunta a add_snapshot si la URL no tiene ninguno. | url obligatorio, path opcional |
remove_snapshot | Elimina el Snapshot de una URL pública. La URL permanece reservada y sigue sirviendo en vivo mientras tu túnel esté activo. Marcada como destructiva. | url obligatorio |
get_snapshot_status | Informa el Snapshot de una URL pública: su carpeta de origen, cuándo se publicó, si el origen cambió desde entonces (obsoleto) y si la URL sirve en vivo o el snapshot ahora mismo. También lleva los comentarios de revisión sobre él (estado y recuentos) y, una vez que los comentarios han estado activados, el número de versión del Snapshot. | url obligatorio |
Control de acceso (ver Control de acceso):
| Herramienta | Qué hace | Parámetros |
|---|---|---|
set_password | Protege con contraseña una URL pública para que solo las personas que tengan la contraseña puedan abrirla. Se aplica en los servidores de LocalCan, por lo que también cubre un Snapshot en esa URL. Genera una contraseña segura a menos que pases una, y la devuelve para que puedas compartirla. Necesita un plan de suscripción. | url obligatorio, password opcional (omítelo para generar una) |
clear_access | Elimina la protección con contraseña, haciendo la URL pública de nuevo. No elimina la URL ni su Snapshot. Marcada como destructiva, por lo que los hosts suelen pedir confirmación. | url obligatorio |
get_access_status | Informa la protección de una URL pública y devuelve su contraseña actual cuando está protegida con contraseña. La contraseña nunca es devuelta por list_public_urls, solo aquí. | url obligatorio |
Comentarios (los comentarios de revisión que los revisores dejan en un Snapshot, ver Comentarios):
| Herramienta | Qué hace | Parámetros |
|---|---|---|
list_comments | Lista los hilos de comentarios en el Snapshot de una URL pública con sus respuestas. Cada hilo lleva la ruta de la página, el ancla (un selector CSS y la posición del pin en ese elemento), la ventana gráfica y el navegador del revisor, y la versión del Snapshot en la que se dejó. Nunca marca nada como leído. | url obligatorio, status abierto, resuelto o todos (por defecto abierto), page ruta, version número |
reply_comment | Publica una respuesta en un hilo bajo el nombre de tu cuenta. Los revisores del hilo la reciben por correo electrónico a menos que las notificaciones de respuestas estén desactivadas para el equipo o se hayan dado de baja. Solo respuestas; los nuevos hilos se fijan en la página. | url, comment_id, body obligatorios |
resolve_comment | Marca un hilo como resuelto, incluidas las respuestas. | url y comment_id obligatorios |
reopen_comment | Reabre un hilo resuelto. | url y comment_id obligatorios |
set_comments | Cambia los comentarios en un Snapshot: activados, pausados (los hilos existentes siguen siendo legibles, sin nuevos) o desactivados. Necesita una URL protegida y un plan de suscripción. | url y state obligatorios |
El bucle de retroalimentación
Las herramientas se encadenan en un bucle que un agente puede ejecutar por sí solo: list_comments para leer los hilos abiertos, editar el origen, update_snapshot para publicar la nueva versión, luego reply_comment y resolve_comment por hilo. Los comentarios se transfieren a la nueva versión, así que el revisor ve la respuesta en el mismo pin. El servidor le dice esto al agente por sí mismo. Sus instrucciones MCP, que los hosts añaden al prompt del agente, describen el bucle, la configuración de rondas de revisión (publish_snapshot, set_password, set_comments) y la receta del host virtual. Dos cosas que un agente no puede hacer: iniciar un hilo (los revisores los fijan en la página) y marcar hilos como leídos (no leído es tu propio estado de bandeja de entrada en la aplicación).
Conectando un agente
Cómo te conectas depende de cómo se ejecute el agente. Los agentes de terminal (Claude Code, Codex) heredan el PATH de tu shell, así que un comando simple localcan funciona. Las aplicaciones GUI (Cursor, Claude Desktop, VS Code y otras) no cargan el PATH de tu shell, así que necesitan la ruta absoluta al binario, por ejemplo /Users/you/.localcan/bin/localcan. La configuración de la aplicación de escritorio puede copiar una configuración lista con la ruta correcta completada, que también es la ruta fiable en Windows.
Claude Code
claude mcp add --scope user localcan -- localcan mcp
La bandera --scope user registra el servidor para cada proyecto. Elimínala para registrarlo solo en el proyecto actual.
Codex
codex mcp add localcan -- localcan mcp
Esto escribe el servidor en ~/.codex/config.toml. Para la aplicación de escritorio de Codex o la extensión del IDE, pasa la ruta absoluta en lugar de localcan.
Cursor, Claude Desktop y Windsurf
Estos comparten el mismo formato mcpServers:
{
"mcpServers": {
"localcan": {
"command": "/Users/you/.localcan/bin/localcan",
"args": ["mcp"]
}
}
}
Añádelo al archivo correcto y luego recarga:
- Cursor:
~/.cursor/mcp.json, luego habilita el servidor en Configuración. - Claude Desktop:
claude_desktop_config.json(Configuración, Desarrollador, Editar Configuración), luego sal y reinicia. - Windsurf:
~/.codeium/windsurf/mcp_config.json, luego actualiza el panel MCP.
VS Code
VS Code (modo agente Copilot) usa una clave servers con un tipo explícito. Añade esto a .vscode/mcp.json en tu espacio de trabajo:
{
"servers": {
"localcan": {
"type": "stdio",
"command": "/Users/you/.localcan/bin/localcan",
"args": ["mcp"]
}
}
}
También puedes ejecutar code --add-mcp con el mismo objeto de servidor.
Zed
Zed usa context_servers en su settings.json:
{
"context_servers": {
"localcan": {
"source": "custom",
"command": "/Users/you/.localcan/bin/localcan",
"args": ["mcp"]
}
}
}
También puedes añadirlo desde la configuración del Panel de Agente.
Acceso del agente, redacción y acceso de escritura
Los tres se controlan en la aplicación de escritorio bajo Configuración (la sección "Agentes de IA (MCP)"), o desde la terminal: localcan mcp enable / disable para acceso del agente, localcan mcp redact <on|off> para redacción, localcan mcp access <read_only|read_write> para acceso de escritura y localcan mcp status para ver el estado actual.
- El acceso de agentes está activado por defecto. Desactívalo para evitar que los agentes usen LocalCan por completo. El servidor sigue iniciándose, pero cada herramienta devuelve un mensaje claro de "acceso deshabilitado" hasta que lo vuelvas a activar.
- La redacción está activada por defecto para agentes. Los encabezados sensibles (Authorization, cookies, claves de API) se eliminan de las respuestas de las herramientas. Las URLs y los cuerpos no se redactan. Desactívala para que tu propio agente reciba valores sin procesar.
- El acceso de escritura está desactivado por defecto. La lectura funciona sin él, pero las herramientas de escritura devuelven un mensaje claro de solo lectura hasta que lo actives en la aplicación ("Permitir que los agentes creen y cambien URLs públicas") o con
localcan mcp access read_write. Activar el acceso de agentes no otorga acceso de escritura. Son interruptores separados. Cada llamada de escritura se registra en la salida de diagnóstico del servidor, que tu host captura, para que tengas un registro de lo que un agente cambió. Una contraseña pasada aset_passwordse enmascara en ese registro.
Cuando una herramienta se niega
- Cada herramienta da error con un mensaje de conexión del daemon: LocalCan no está en ejecución. Abre la aplicación de escritorio o ejecuta
localcan start -d. list_trafficno devuelve nada: la captura está desactivada (está desactivada por defecto y se restablece cuando el daemon se reinicia). Ejecutalocalcan traffic enableo deja que el agente llame aenable_capture.- "Acceso MCP deshabilitado": el acceso de agentes está desactivado. Ejecuta
localcan mcp enableo cambia el interruptor en Configuración. - "MCP es de solo lectura": la herramienta cambia cosas y el acceso de escritura está desactivado. Ejecuta
localcan mcp access read_writeo activa el interruptor en Configuración. - "las URLs públicas requieren una licencia": crear y agregar una URL pública requiere una licencia activa. Activa una en la aplicación o con
localcan license activate <key>. - "se necesita un plan de suscripción": Snapshots y Control de acceso son solo de suscripción. Una licencia perpetua puede abrir URLs públicas pero no puede publicar un Snapshot ni establecer una contraseña. Suscríbete desde tu panel y luego reintenta.
- "ya tiene un snapshot" o "aún no tiene snapshot": usa la herramienta que el mensaje menciona.
add_snapshotadjunta un Snapshot a una URL que no tiene ninguno,update_snapshotactualiza uno que ya lo tiene. - "Límite de snapshots alcanzado": tu plan limita cuántas URLs públicas pueden servir un Snapshot a la vez. El mensaje lista las URLs que ya usan un espacio, que puedes actualizar con
update_snapshoten lugar de publicar uno nuevo. - "Los comentarios necesitan una URL protegida": se llamó a
set_commentsen una URL sin Control de acceso. Ejecutaset_passwordprimero. - "Tu cuenta no tiene nombre para mostrar": una respuesta necesita un nombre para publicarse. Configúralo en el panel, o responde una vez en la página del Snapshot después de abrirlo como propietario desde la aplicación.
- El host muestra el servidor como fallido o sin herramientas: una aplicación GUI no puede encontrar
localcanen el PATH. Usa la ruta absoluta, más fácilmente mediante la configuración de copia en Configuración.