Servidor local y MCP

Servidor local, servicios MCP y alcance de los permisos.

1. Arranca y conecta

MCP conecta el chat con herramientas del equipo y servicios externos. Necesitas el servidor local de ZeroChat. Elige una forma de instalación:

PyPI (recomendado)

Linux, macOS y Android (Termux):

pip install zerochat
zerochat

Windows (PowerShell o CMD): usa el lanzador py, que funciona aunque la carpeta Scripts de Python no esté en el PATH.

py -m pip install zerochat
py -m zerochat

Descarga directa

Linux, macOS y Android (Termux):

curl -fsSL https://albalday.github.io/zerochat/zerochat.py -o zerochat.py
python3 zerochat.py

Windows (PowerShell o CMD): curl.exe viene con Windows 10 y 11; en PowerShell hay que escribirlo con .exe para no usar el alias de Invoke-WebRequest.

curl.exe -fsSL https://albalday.github.io/zerochat/zerochat.py -o zerochat.py
py zerochat.py

Para los siguientes arranques, utiliza zerochat (o py -m zerochat en Windows) o python3 zerochat.py (py zerochat.py en Windows), respectivamente. Ambos abren GitHub Pages y guardan los datos locales en ~/zerochat/.

  1. Mantén el servidor en ejecución y abre el enlace que proporciona.
  2. Ve a Ajustes → MCP y comprueba la conexión y las herramientas descubiertas.
  3. Habilita las herramientas que necesites y revisa sus permisos.

El enlace con que zerochat abre el navegador lleva el token del día; la página lo guarda y vuelve a conectar sola en los siguientes arranques. Si aparece desconectado, comprueba que el proceso siga en ejecución y revisa los permisos de red local del navegador. Para un servidor en otro puerto, en otro equipo (por un túnel SSH) o detrás de un proxy inverso, usa el panel de Conexión (el icono del enchufe, junto a la rueda de configuración de la barra lateral): desactiva Conexión local, escribe su URL y pulsa Conectar. Si falta el token o ha caducado (cambia cada día), la página pide el usuario y la contraseña de la cuenta que ejecuta zerochat; la contraseña no se guarda. No compartas el enlace de arranque.

Compatibilidad de navegador: ZeroChat no es compatible con WebKit (Safari y todos los navegadores de iPhone/iPad). En macOS debería funcionar con Firefox o un navegador basado en Chromium, aunque no se ha probado. Más detalles. Entornos probados: Linux, Windows (PowerShell) y Android (Termux). En Termux no es posible usar Playwright actualmente, así que browser_action y Playwright MCP no están disponibles.

Modos de uso, datos locales y actualizaciones →

2. Usa las herramientas del equipo

Los resultados de herramientas forman parte de la conversación y pueden enviarse al modelo seleccionado.

3. Inicia un servicio MCP externo

En Ajustes → MCP → Servidores MCP disponibles, configura cada servicio y pulsa Iniciar. ZeroChat prepara sus dependencias declaradas. Para detenerlo, pulsa Detener.

Servicio incluidoUso y requisitos
ejemploPlantilla para servicios propios; no descarga dependencias.
composioAplicaciones remotas mediante mcp-remote y OAuth; Node.js 18+ y npm.
playwrightAutomatización de navegador; Node.js 18+, npm y Chromium. Su navegador se configura en Ajustes › Navegador, y sus herramientas solo se ofrecen si allí está elegido Playwright MCP.
memoryMemoria y grafos de conocimiento; Node.js 18+ y npm.

Instalar Node.js en Windows

Abre PowerShell e instala la versión LTS con winget, incluido en Windows 10 y 11:

winget install OpenJS.NodeJS.LTS

También puedes descargar el instalador LTS (.msi) desde nodejs.org y aceptar las opciones por defecto, que añaden Node.js y npm al PATH.

  1. Cierra PowerShell y abre una ventana nueva para que se cargue el PATH actualizado.
  2. Comprueba la instalación con node --version y npm.cmd --version.
  3. Reinicia ZeroChat desde esa ventana nueva: el servidor solo detecta Node.js y npm si estaban en el PATH al arrancar.

Si npm --version falla con un error de directiva de ejecución de scripts, usa npm.cmd. ZeroChat no se ve afectado por esa directiva.

Arranque y OAuth

El botón muestra Iniciando y queda deshabilitado. Si el arranque supera 15 segundos, ZeroChat consulta el estado y espera en intervalos de 15 segundos: hasta 20 minutos mientras instala dependencias (por ejemplo, Playwright y su navegador) o espera la autorización OAuth, y hasta diez intervalos más mientras inicia. La instalación y la espera de OAuth no se consideran fallos al vencer el primer timeout; cuando el servicio está activo, el panel se actualiza automáticamente. El botón indica el número de intento.

Si el servicio necesita OAuth, la tarjeta muestra el aviso Se requiere autorización con el botón Autorizar en el navegador. ZeroChat intenta abrir la pestaña de autorización; si el navegador la bloquea, pulsa el botón. Al abrirse desde la propia web, funciona también en Android y Termux. Si se agota la espera, el servicio puede seguir arrancando; recarga la página para comprobar el resultado.

Los servicios no se reinician automáticamente en el siguiente arranque de ZeroChat. Si había alguno activo en la sesión anterior, al conectar aparece un diálogo con la lista: quita con la X los que no quieras y pulsa Iniciar para arrancar el resto, o No iniciar para dejarlos detenidos. Los que no se inician quedan como no iniciados y no se vuelven a ofrecer. Si alguno falla, ZeroChat lo indica y el error queda en su tarjeta de este panel.

Las acciones de este panel se aplican al momento: no necesitan Guardar.

Si falla la instalación

Lee el error de la tarjeta. Comprueba node --version, npm --version, la conexión a la red y el espacio libre; después vuelve a intentarlo. No necesitas reinstalar ZeroChat. En Windows, consulta Instalar Node.js en Windows.

4. Revisa los permisos

En Ajustes → Permisos, elige la política global y revisa las autorizaciones guardadas. En el panel MCP puedes elegir Preguntar, Permitir o Denegar para cada herramienta.

Las decisiones pueden aplicarse a una llamada, a la sesión del backend o de forma permanente. Las herramientas externas se llaman <servicio>_<herramienta>: confiar en composio autoriza sus herramientas, no las de otros servicios. Permitir una herramienta no autoriza todo el servicio.

Directorios permitidos: una regla por línea con R: (lectura), W: (escritura) o RW: (ambas). Usa * para un segmento y ** para subdirectorios. Una lista vacía incorpora una regla de lectura para el directorio de arranque. Las rutas con ~ o variables no se resuelven en el navegador y siempre piden confirmación: usa rutas absolutas. Los comandos también tienen reglas de prefijos y comprobaciones adicionales.

Permitir siempre un comando: autoriza solo ese programa, sin encadenamiento, tuberías ni redirecciones a archivos. Un cd <carpeta> && inicial se admite si la carpeta está cubierta por una regla de directorio, igual que el directorio de trabajo del comando. Autorizar un programa confía en todas sus opciones: git puede ejecutar otros comandos mediante su configuración o alias.

Estas reglas no son un aislamiento del sistema operativo. Los comandos y servicios autorizados actúan con los permisos del proceso local. Detener una llamada no revierte sus cambios.

5. Añade tu propio servicio

Crea una carpeta nueva dentro de ~/zerochat/services/ con nombre e id únicos. Usa ejemplo como plantilla: service.json es obligatorio; añade installer.json solo para paquetes npm. El README.md de la plantilla describe los campos, incluido el enlace opcional help.

Puedes pedir al agente que cree la definición con uno de estos prompts. Sustituye los marcadores. El agente prepara los archivos; tú introduces las credenciales y arrancas el servicio.

Prompt para un MCP local (stdio)

Quiero crear el MCP local <nombre-del-mcp> para ZeroChat.
Localiza el directorio personal del usuario y lee README.md,
service.json e installer.json.example de zerochat/services/ejemplo
usando sus rutas absolutas. Sigue las instrucciones del README.
Consulta la documentación oficial del MCP y crea una carpeta hermana
con nombre e id propios; no modifiques los servicios incluidos.
Si necesita una API key, deja PASTE_API_KEY_HERE en service.json,
dentro del objeto env de launch, con la variable que exige el MCP.
Yo sustituiré el marcador por mi clave a mano en ese service.json.
No me pidas la clave ni crees un archivo launch.env o .env.
Indica la ruta absoluta del JSON y el campo que debo editar a mano.
No instales ni inicies el servicio; lo haré desde Ajustes → MCP.

Prompt para un MCP remoto (HTTP/SSE)

El proceso gestionado mcp-remote usa stdio con ZeroChat y HTTP/SSE con el proveedor. Toma Composio como ejemplo de puente y adapta la autenticación al nuevo proveedor.

Quiero crear el MCP remoto <nombre-del-mcp> para ZeroChat.
Su endpoint es <url-del-mcp>.
Localiza el directorio personal del usuario y lee README.md de
zerochat/services/ejemplo y los JSON de zerochat/services/composio
usando sus rutas absolutas. Sigue el README y toma Composio
como ejemplo de un puente mcp-remote gestionado por stdio.
Crea una carpeta hermana con nombre e id propios y textos bilingües.
Consulta la documentación oficial del MCP y del puente para adaptar
endpoint, transporte y autenticación. No copies sin verificar las
opciones específicas de OAuth o protocolo de Composio.
Conserva el aislamiento HOME y USERPROFILE en ${serviceDir}.
Si requiere API key, deja PASTE_API_KEY_HERE en service.json,
dentro del objeto env de launch. Yo introduciré mi clave a mano
en ese service.json; no crees un archivo launch.env o .env.
Configura --header con la cabecera que exige el proveedor y una
referencia a esa variable; mcp-remote resolverá la referencia.
No me pidas la clave ni la escribas en los argumentos o en la URL.
Indica la ruta absoluta del JSON y el campo que debo editar a mano.
No instales ni inicies el servicio; lo haré desde Ajustes → MCP.

Si la carpeta nueva no aparece en Ajustes → MCP, reinicia ZeroChat y vuelve a conectar. Tus carpetas se conservan al actualizar. Las definiciones incluidas (ejemplo, composio, playwright, memory) se restauran al arrancar; crea una copia con otro nombre e id en lugar de editarlas. No copies dependencias ni credenciales OAuth.

6. Introduce una API key

launch.env indica el objeto env dentro de launch en service.json; no es un archivo. El agente deja el marcador y tú introduces la clave real a mano en ese JSON.

  1. Detén el servicio si está activo. Abre el service.json de tu carpeta.
  2. Sustituye PASTE_API_KEY_HERE en launch.env por la clave real, usando el nombre de variable que exige el proveedor. No la pegues en el chat.
  3. Guarda un JSON válido. En Linux o Termux limita el acceso con chmod 600 /ruta/absoluta/zerochat/services/mi-servicio/service.json.
  4. Inicia el servicio desde Ajustes → MCP.

La clave queda en texto plano: no compartas ni subas este archivo al repositorio. Borrar ~/zerochat/ también elimina los servicios y sus credenciales; conserva una copia privada si la necesitas.

Ejemplo para un servicio local

Dentro de launch, utiliza el nombre de variable indicado por el MCP:

"env": {
  "SERVICE_API_KEY": "PASTE_API_KEY_HERE"
}

No necesitas export, un archivo .env ni otro JSON de credenciales. Escribe el valor real en launch.env; las referencias a variables de entorno en ese campo quedan como texto literal. ZeroChat sustituye rutas de servicio/intérpretes y referencias ${option:...}.

Ejemplo para un servicio remoto con cabecera Bearer

Adapta los argumentos del puente y conserva el aislamiento existente de HOME y USERPROFILE:

"args": [
  "${serviceDir}/node_modules/mcp-remote/dist/proxy.js",
  "https://mcp.example.com/mcp",
  "--header",
  "Authorization: Bearer ${REMOTE_API_KEY}"
],
"env": {
  "HOME": "${serviceDir}",
  "USERPROFILE": "${serviceDir}",
  "REMOTE_API_KEY": "PASTE_API_KEY_HERE"
}

mcp-remote resuelve ${REMOTE_API_KEY} en la cabecera. Usa la cabecera y el formato que exija el proveedor. remote.authentication es descriptivo; no configura la autenticación. Consulta la documentación de cabeceras del puente.