Gateway
Las herramientas invocan la API
El Gateway de OpenClaw expone un endpoint HTTP para invocar directamente una única herramienta. Siempre está habilitado y utiliza la autenticación del Gateway junto con la política de herramientas. Al igual que la superficie /v1/* compatible con OpenAI, la autenticación de portador con secreto compartido se considera acceso de operador de confianza para todo el Gateway.
POST /tools/invoke- Mismo puerto que el Gateway (multiplexación de WS + HTTP):
http://<gateway-host>:<port>/tools/invoke - Tamaño máximo predeterminado del cuerpo de la solicitud: 2 MB
Autenticación
Utiliza la configuración de autenticación del Gateway.
Rutas habituales de autenticación HTTP:
- autenticación mediante secreto compartido (
gateway.auth.mode="token"o"password"):Authorization: Bearer <token-or-password> - autenticación HTTP de confianza con identidad (
gateway.auth.mode="trusted-proxy"): enrute mediante el proxy configurado con reconocimiento de identidad y permita que este inyecte los encabezados de identidad necesarios - autenticación abierta de entrada privada (
gateway.auth.mode="none"): no se requiere ningún encabezado de autenticación
Notas:
mode="token"utilizagateway.auth.token(oOPENCLAW_GATEWAY_TOKEN).mode="password"utilizagateway.auth.password(oOPENCLAW_GATEWAY_PASSWORD).mode="trusted-proxy"requiere que la solicitud HTTP proceda de un origen de proxy de confianza configurado; los proxies de bucle invertido del mismo host requierengateway.auth.trustedProxy.allowLoopback = trueexplícito.- Los llamadores internos del mismo host que omiten el proxy pueden utilizar
gateway.auth.password/OPENCLAW_GATEWAY_PASSWORDcomo alternativa directa local. Cualquier evidencia de los encabezadosForwarded,X-Forwarded-*oX-Real-IPmantiene la solicitud en la ruta del proxy de confianza. - Si se configura
gateway.auth.rateLimity se producen demasiados fallos de autenticación, el endpoint devuelve429conRetry-After.
Límite de seguridad (importante)
Trate este endpoint como una superficie de acceso completo de operador para la instancia del Gateway.
- Aquí, la autenticación de portador HTTP no es un modelo de ámbitos restringidos por usuario.
- Un token o una contraseña válidos del Gateway para este endpoint deben tratarse como una credencial de propietario u operador.
- En los modos de autenticación mediante secreto compartido (
tokenypassword), el endpoint restablece los valores predeterminados normales de operador completo incluso si el llamador envía un encabezadox-openclaw-scopesmás restringido. - La autenticación mediante secreto compartido también trata las invocaciones directas de herramientas en este endpoint como turnos enviados por el propietario.
- Los modos HTTP de confianza con identidad (autenticación mediante proxy de confianza o
gateway.auth.mode="none"en una entrada privada) respetanx-openclaw-scopescuando está presente y, de lo contrario, recurren al conjunto normal de ámbitos predeterminados del operador. - Mantenga este endpoint únicamente en el bucle invertido, la red de Tailscale o una entrada privada; no lo exponga directamente a la Internet pública.
Matriz de autenticación:
| Modo de autenticación | Comportamiento |
|---|---|
token o password + Authorization: Bearer ... |
Demuestra la posesión del secreto compartido del operador del Gateway. Ignora x-openclaw-scopes más restringidos. Restablece el conjunto completo de ámbitos predeterminados del operador: operator.admin, operator.approvals, operator.pairing, operator.read, operator.talk.secrets, operator.write. Trata las invocaciones directas de herramientas como turnos enviados por el propietario. |
HTTP de confianza con identidad (autenticación mediante proxy de confianza o mode="none" en una entrada privada) |
Autentica una identidad externa de confianza o un límite de implementación. Respeta x-openclaw-scopes cuando está presente. Recurre al conjunto normal de ámbitos predeterminados del operador cuando el encabezado está ausente. Solo pierde la semántica de propietario cuando el llamador restringe explícitamente los ámbitos y omite operator.admin. |
Cuerpo de la solicitud
{ "tool": "sessions_list", "action": "json", "args": {}, "sessionKey": "main", "dryRun": false}Campos:
tool/name(cadena, obligatorio): nombre de la herramienta que se invocará.nametiene prioridad si se envían ambos.action(cadena, opcional): se combina conargs.actionsi el esquema de la herramienta admite una propiedadactionyargstodavía no ha establecido ninguna.args(objeto, opcional): argumentos específicos de la herramienta.sessionKey(cadena, opcional): clave de la sesión de destino. Si se omite o es"main", el Gateway utiliza la clave de sesión principal configurada (respetasession.mainKeyy el agente predeterminado, oglobalen el ámbito de sesión global).agentId(cadena, opcional): resuelve la clave de sesión de ese agente. Produce un error con400si entra en conflicto con unsessionKeyexplícito que ya está asignado a otro agente.idempotencyKey(cadena, opcional): se utiliza para derivar un identificador estable de llamada a herramienta para la invocación.dryRun(booleano, opcional): reservado para uso futuro; actualmente se ignora.
Comportamiento de políticas y enrutamiento
La disponibilidad de las herramientas se filtra mediante la misma cadena de políticas que utilizan los agentes del Gateway:
tools.profile/tools.byProvider.profiletools.allow/tools.byProvider.allowagents.<id>.tools.allow/agents.<id>.tools.byProvider.allow- políticas de grupo (si la clave de sesión corresponde a un grupo o canal)
- política de subagentes (cuando se invoca con una clave de sesión de subagente)
Si la política no permite una herramienta, el endpoint devuelve 404.
Notas importantes sobre los límites:
- Las aprobaciones de ejecución son mecanismos de protección para el operador, no un límite de autorización independiente para este endpoint HTTP. Si se puede acceder a una herramienta desde aquí mediante la autenticación del Gateway y la política de herramientas,
/tools/invokeno añade una solicitud adicional de aprobación por llamada. - Si se puede acceder a
execdesde aquí, trátelo como una superficie de shell con capacidad de modificación. Denegarwrite,edit,apply_patcho las herramientas HTTP de escritura en el sistema de archivos no hace que la ejecución del shell sea de solo lectura. - No comparta las credenciales de portador del Gateway con llamadores que no sean de confianza. Si necesita separar distintos límites de confianza, ejecute gateways independientes (preferiblemente con distintos usuarios o hosts del sistema operativo).
De forma predeterminada, el HTTP del Gateway también aplica una lista de denegación estricta (aunque la política de sesión permita la herramienta):
| Herramienta | Motivo |
|---|---|
exec |
Ejecución directa de comandos (superficie de RCE) |
spawn |
Creación arbitraria de procesos secundarios (superficie de RCE) |
shell |
Ejecución de comandos de shell (superficie de RCE) |
fs_write |
Modificación arbitraria de archivos en el host |
fs_delete |
Eliminación arbitraria de archivos en el host |
fs_move |
Movimiento o cambio de nombre arbitrario de archivos en el host |
apply_patch |
La aplicación de parches puede reescribir archivos arbitrarios |
sessions_spawn |
Orquestación de sesiones; iniciar agentes remotamente constituye RCE |
sessions_send |
Inyección de mensajes entre sesiones |
cron |
Plano de control de automatización persistente |
gateway |
Plano de control del Gateway; impide la reconfiguración mediante HTTP |
nodes |
La retransmisión de comandos de Node puede alcanzar system.run en hosts emparejados |
cron, gateway y nodes también son exclusivos del propietario: incluso fuera de esta lista de denegación predeterminada, los llamadores que no sean propietarios no pueden invocarlos en esta superficie.
Personalice la lista de denegación general mediante gateway.tools:
{ gateway: { tools: { // Herramientas adicionales que se bloquearán mediante HTTP /tools/invoke deny: ["browser"], // Eliminar herramientas de la lista de denegación predeterminada para llamadores propietarios o administradores allow: ["gateway"], }, },}gateway.tools.allow es una anulación de exposición, no una ampliación de ámbitos. En los modos HTTP con identidad, cron, gateway y nodes siguen sin estar disponibles para los llamadores sin identidad de propietario o administrador (operator.admin), incluso cuando aparecen en gateway.tools.allow. La autenticación de portador mediante secreto compartido sigue la regla de operador de plena confianza indicada anteriormente.
Para ayudar a que las políticas de grupo resuelvan el contexto, se pueden establecer opcionalmente:
x-openclaw-message-channel: <channel>(ejemplo:slack,telegram)x-openclaw-account-id: <accountId>(cuando existen varias cuentas)x-openclaw-message-to: <target>(destino de entrega para la política de herramientas de mensajería)x-openclaw-thread-id: <threadId>(contexto del hilo para la política de herramientas de mensajería)
Respuestas
| Estado | Significado |
|---|---|
200 |
{ ok: true, result } |
400 |
{ ok: false, error: { type, message } } (solicitud no válida o error en la entrada de la herramienta) |
401 |
No autorizado |
403 |
{ ok: false, error: { type, message, requiresApproval? } } (llamada a herramienta bloqueada por la política) |
404 |
Herramienta no disponible (no encontrada o no incluida en la lista de permitidas) |
405 |
Método no permitido |
408 |
Se agotó el tiempo de lectura del cuerpo de la solicitud |
413 |
El cuerpo de la solicitud superó el tamaño máximo de la carga útil |
429 |
Autenticación limitada por frecuencia (Retry-After establecido) |
500 |
{ ok: false, error: { type, message } } (error inesperado de ejecución de la herramienta; mensaje depurado) |
Ejemplo
curl -sS http://127.0.0.1:18789/tools/invoke \ -H 'Authorization: Bearer secret' \ -H 'Content-Type: application/json' \ -d '{ "tool": "sessions_list", "action": "json", "args": {} }'