Skip to main content
Glama

@reachpad/mcp

reachpad permite a Claude, Codex y otros agentes de codificación crear aplicaciones full-stack en espacios de trabajo persistentes y compartirlas mediante un enlace, sin necesidad de un despliegue separado. Un espacio de trabajo es un ordenador de desarrollo en la nube que el agente opera por sí mismo: un repositorio, un sistema de archivos, dependencias instaladas y estado de compilación que sobreviven entre llamadas, no un sandbox efímero que olvida. Los procesos son la excepción; ver más abajo.

Este es el servidor MCP. Permite a Claude, ChatGPT, Cursor, OpenCode o a tu propio agente crear un entorno, ejecutar comandos en él, bifurcarlo y volver a él más tarde, sin que un desarrollador tenga que mantener un portátil abierto.

  • Persiste. Pausa el entorno y el disco queda sellado; la siguiente llamada arranca desde ese sello con los archivos, las instalaciones y el estado de git intactos, en lugar de reconstruir. Los procesos son la excepción: un arranque siempre es un arranque en frío.

  • Se bifurca. Veinte intentos desde un estado preparado cuestan un delta cada uno, no veinte reconstrucciones, porque el entorno es una cadena de instantáneas, no una máquina.

  • Puede mantener los secretos fuera de la caja. Una credencial intermediada se invoca en el límite en tu nombre y su valor nunca entra en el entorno, el registro o el almacén. Una credencial escrita en el entorno, en cambio, es legible allí, por diseño.

  • Es agnóstico respecto al agente. La API REST es canónica; este servidor, el SDK y la CLI son traducciones de ella. Trae tu propio agente.

La API es el límite del producto, no una interfaz web: reachpad.dev.

Instalación

npx -y @reachpad/mcp          # stdio, for a local client

En Claude Code:

claude mcp add reachpad -e REACHPAD_IDENTITY_CREDENTIAL=… -- npx -y @reachpad/mcp

Related MCP server: Nolane Habitat

Dos transportes, una implementación

npx @reachpad/mcp                                  # stdio
REACHPAD_MCP_HTTP_PORT=8722 npx @reachpad/mcp      # streamable http

stdio es lo que un cliente local usa para comunicarse; Streamable HTTP es lo que usa un conector remoto. Mismas herramientas, mismo comportamiento — añadido en lugar de bifurcado, porque dos implementaciones de una misma superficie es como se desvían.

El lado HTTP responde 405 a GET: cada herramienta aquí es de petición/respuesta, y la especificación permite rechazar el flujo iniciado por el servidor en lugar de mantener una conexión abierta para tráfico que nunca llega. No hay sesiones — nada se mantiene entre llamadas que un reinicio no pudiera reconstruir. Y no lleva ninguna credencial propia: lo que autoriza la petición HTTP es lo que autoriza reachpad.

Configuración

variable

significado

REACHPAD_ENDPOINT

tu host de reachpad. Se rechaza http:// en texto plano a cualquier cosa que no sea loopback antes de abrir un socket.

REACHPAD_IDENTITY_CREDENTIAL

tu credencial por usuario. Nombra una cuenta y no puede actuar por otra: el servidor toma la identidad del propio registro de la credencial, nunca de la petición.

REACHPAD_API_KEY

opcional, con ámbito por entorno y revocable. Cuando se establece, run_command la usa y no necesita intercambio de identidad.

REACHPAD_MCP_HTTP_PORT

sirve HTTP en lugar de stdio.

REACHPAD_MCP_HTTP_HOST

por defecto 127.0.0.1. Este proceso se conecta a un plano de control con tus credenciales, así que vincularlo al mundo es una decisión tomada a propósito, detrás de un proxy que termina TLS.

REACHPAD_MCP_HTTP_TOKEN

token de portador, comparado en tiempo constante. Si está ausente, todo llamador que pueda alcanzar el puerto está autorizado, y el servidor lo dice en stderr.

REACHPAD_MCP_ALLOWED_ORIGINS

separados por comas. Una petición que lleve un Origin no listado es rechazada — un navegador no puede falsificarlo, lo que cierra el rebinding de DNS. Sin Origin es un cliente no navegador y se permite.

Si se establecen varias credenciales, gana la más restrictiva, y una credencial rechazada nunca se reintenta con una más amplia — retroceder sería una escalada de privilegios que nadie eligió realizar.

Herramientas

tool

qué hace

get_credit_balance()

créditos de cómputo restantes. Un crédito ejecuta un entorno estándar durante un minuto.

create_environment(repo?, ref?, name?)

un nuevo entorno, opcionalmente con un repositorio clonado en $HOME/work. Reachpad genera su nombre visible si se omite.

list_environments()

tus entornos y cuántas bifurcaciones tiene cada uno

get_environment(environment)

de qué arranca: su instantánea principal, su posición de registro y su árbol de bifurcaciones

run_command(environment, argv, cwd?, env?, timeout_ms?)

un comando, su código de salida y su salida. Un entorno en pausa se reanuda para servirlo.

checkpoint_environment(environment, name?)

bifurca desde la última instantánea sellada; el original no se toca

expose_port(environment, port, check?)

abre un puerto a la web y obtén el enlace que lo alcanza. Idempotente por puerto.

list_ports(environment)

los puertos que este entorno tiene abiertos, del más antiguo al más reciente, con sus enlaces

revoke_port(environment, port)

cierra un puerto. Reabrirlo más tarde genera un enlace diferente.

delete_environment(environment)

archívalo y libera el hueco del plan. Nada se elimina: las instantáneas y el historial sobreviven.

No está aquí, deliberadamente: iniciar un agente dentro del entorno. Está en la hoja de ruta de reachpad y aún no está en la flota — una herramienta que siempre falla cuesta un turno a un modelo y le enseña a desconfiar del resto, así que este servidor no anuncia nada que no pueda servir.

Qué es y qué no es un enlace de puerto

Vale la pena leerlo antes de entregárselo a alguien, porque nada de esto se puede descubrir desde la URL:

  • Cualquier persona con sesión iniciada en Reachpad que tenga el enlace puede abrirlo. No es una URL privada ni segura. Trátalo como un despliegue de vista previa.

  • El enlace es una dirección, no una copia. Reinicia la aplicación en el mismo puerto y el mismo enlace sirve la nueva versión.

  • Un proceso en ejecución no sobrevive a una pausa. El entorno arranca en frío con sus archivos intactos y nada en ejecución, así que después de una pausa el enlace responde con un error hasta que algo vuelva a escuchar en ese puerto. La petición de un visitante despierta un entorno en pausa; no reinicia nada dentro de él.

  • expose_port marca el puerto después y te dice si nada respondió, porque un enlace a un puerto que no sirve nada se ve exactamente como un enlace que funciona. Pasa check: false para omitirlo: el marcado reanuda un entorno en pausa.

  • Con solo REACHPAD_API_KEY, la clave debe ser --role owner. Una clave de collaborator es rechazada: listar devuelve tokens vivos, y un token es una capacidad.

Las reglas para las que está construido

Estas son las formas en que un cliente ingenuo de una API de ejecución en streaming engaña a un modelo, y lo que esta hace en su lugar.

  • Un flujo no terminado es UNKNOWN, nunca éxito. Si la respuesta termina sin un evento terminal, la herramienta lo dice con esas palabras. No es una salida cero, y un agente no debe reintentar un comando no idempotente basándose en ello.

  • Su plazo es más flexible que el del servidor, así que una respuesta del lado del servidor siempre gana la carrera. Un cliente que se rinde primero convierte "tu compilación terminó" en "desconocido", y los números se reflejan desde el servidor en lugar de adivinarse.

  • Los rechazos llevan remedios, no códigos. En el límite de tu plan obtienes el límite, tu recuento actual y qué hacer: los números vienen del servidor, porque un límite codificado en un cliente es una mentira en el momento en que tu plan cambia.

  • Los resultados son identificadores, no cargas útiles. La salida se trunca con el recuento de bytes descartados nombrado. Los registros de compilación pueden ser de megabytes, y un resultado MCP de ese tamaño destruye la ventana de contexto del llamador.

  • Un rechazo es un resultado, no un error de transporte, para que el modelo pueda leerlo y actuar. Solo una herramienta desconocida es un error de protocolo.

Pruebas

node --test 'test/*.test.mjs'

Sin red y sin credenciales. La suite de protocolo lanza el servidor incluido como proceso hijo y habla JSON-RPC real sobre su stdio contra un plano de control simulado en un socket real, así que nada bajo prueba es una importación interna. Una prueba ejecuta el mismo arco contra un reachpad real y se omite cuando no hay un endpoint configurado.

Repositorio

Este repositorio es la fuente. Está deliberadamente separado del backend de reachpad: este código es público, se publica en npm, y su flujo de trabajo de lanzamiento tiene derechos de publicación — nada de lo cual pertenece al mismo repositorio que el plano de control. Nada aquí puede leer el código fuente del backend, y ningún trabajo en el backend copia archivos hacia aquí.

Dos constantes del servidor se reflejan en src/client.js — el período de gracia de ejecución y el tiempo de espera de ejecución predeterminado. Una constante reflejada normalmente se pudre; esta no, porque el propio CI del backend obtiene este paquete publicado y falla si no coinciden. La comprobación vive donde cambiaría el número.

Related MCP Connectors

Related MCP Servers

View all related MCP servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Reachpad/reachpad-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server