Archivos por SFTP
Deja que un agente liste, lea, escriba y mueva archivos en tu servidor mientras Sallyport guarda la clave privada.
En esta página
Cada host SSH que conectas es también un servidor de archivos para tus agentes. Sallyport entra con tu clave, hace la operación con el archivo y devuelve el resultado. El agente nunca ve la clave, y cada operación queda en el registro.
Configuración
No hay nada más que añadir. Conecta el host SSH una vez: la misma conexión, la misma clave y la misma clave de host sirven para sus comandos y sus archivos. El servidor necesita su subsistema SFTP, que OpenSSH activa por defecto.
Elige qué operaciones te esperan
| Operación | Clase |
|---|---|
list, stat, read | Lectura. Leer una clave privada, .env, un archivo de contraseñas o una ruta con .. cuenta como escritura. |
write, mkdir, rename | Escritura |
overwrite, delete, rmdir | Destructiva |
Por defecto, las operaciones con archivos se ejecutan sin preguntar. Ajusta cada clase en la página del agente en Agentes, como para los comandos. La tarjeta de aprobación muestra el host, la operación y la ruta, y en una escritura el texto que entra en el archivo. Los bytes que no son texto se muestran con su tamaño y su SHA-256.
Úsalo desde un agente
list_access nombra las dos herramientas de archivos del host. _sftp_read solo acepta lecturas, así que un cliente puede permitirla una vez. _sftp_write acepta todas las operaciones.
| Argumento | Significado |
|---|---|
op | list, stat, read, write, overwrite, mkdir, rename, delete o rmdir. Obligatorio. |
path | El archivo o directorio: ruta absoluta o relativa al directorio de inicio de sesión. Obligatorio. |
to | rename: la ruta nueva. Un cambio de nombre nunca reemplaza un archivo que ya existe. |
offset, length | read: la parte del archivo que se lee. |
content, content_base64 | write, overwrite: el archivo como texto o sus bytes en base64. write crea un archivo nuevo y nunca reemplaza uno que ya existe; overwrite reemplaza el archivo entero, con una sola tarjeta para aprobar. |
intent | Una frase sobre el motivo, visible para quien aprueba. |
call_id | Continúa una llamada que espera aprobación. |
max_inline_bytes | Cuánto llega en la respuesta. 24 KiB por defecto; fetch_body lee el resto. |
_sftp_write{
"op": "write",
"path": "upload/ledger.csv",
"content": "id,amount\n1,100.50\n",
"intent": "Send the September ledger to the bank"
}Archivos grandes por HTTP
Un archivo demasiado grande para una llamada MCP pasa por el proxy HTTP con el token del agente. La ruta tras el id de la conexión es la ruta absoluta del archivo, y el método es la operación. Una descarga fluye a medida que el servidor la envía, y una subida admite hasta 32 MiB.
| Solicitud | Operación |
|---|---|
GET /p/{id}/srv/report.csv | read. Añade ?offset= y &length= para una parte. |
GET /p/{id}/srv/reports/ | list: una barra al final. |
HEAD /p/{id}/srv/report.csv | stat |
PUT /p/{id}/upload/ledger.csv | write; con ?op=overwrite, overwrite. El cuerpo es el archivo. |
POST /p/{id}/upload/2026?op=mkdir | mkdir |
POST /p/{id}/inbox/a.xml?op=rename&to=/archive/a.xml | rename |
DELETE /p/{id}/inbox/a.xml | delete. Con una barra al final, rmdir. |
export SP_TOKEN='sp_live_…'
BINDING='<ssh-connection-id>'
curl --fail-with-body -X PUT -H "Authorization: Bearer $SP_TOKEN" \
-H 'X-Sallyport-Intent: Send the September ledger to the bank' \
--data-binary @ledger.csv \
"https://mcp.sallyport.cloud/p/$BINDING/upload/ledger.csv"
curl --fail-with-body -H "Authorization: Bearer $SP_TOKEN" \
-o ledger-copy.csv \
"https://mcp.sallyport.cloud/p/$BINDING/upload/ledger.csv"Lee el resultado
- Una lectura responde con
contentsi el archivo es texto y concontent_base64si no lo es, además defile_size. - Un listado responde con
entries: nombre, tipo, tamaño, permisos y hora de cambio.statresponde con unaentry. - Un rechazo del servidor es la respuesta, y no se hizo nada más:
no_such_file,permission_denied,already_exists,is_a_directoryofailure, con el mensaje del servidor. En/p/llega como 404, 403 o 409. - Abre la llamada en Actividad para ver Resultado de la operación con archivos: el destino, la ruta y los bytes movidos. El registro guarda la operación y la ruta, nunca el contenido del archivo.