Fichiers en SFTP
Laissez un agent lister, lire, écrire et déplacer des fichiers sur votre serveur, pendant que Sallyport garde la clé privée.
Sur cette page
Chaque hôte SSH que vous connectez est aussi un serveur de fichiers pour vos agents. Sallyport se connecte avec votre clé, fait l’opération sur le fichier et renvoie le résultat. L’agent ne voit jamais la clé, et chaque opération entre au journal.
Mise en place
Il n’y a rien de plus à ajouter. Connectez l’hôte SSH une fois : la même connexion, la même clé et la même clé d’hôte servent ses commandes et ses fichiers. Le serveur a besoin de son sous-système SFTP, qu’OpenSSH active par défaut.
Choisissez les opérations qui vous attendent
| Opération | Classe |
|---|---|
list, stat, read | Lecture. Lire une clé privée, .env, un fichier de mots de passe ou un chemin avec .. compte comme une écriture. |
write, mkdir, rename | Écriture |
overwrite, delete, rmdir | Destructive |
Par défaut, les opérations sur les fichiers s’exécutent sans demander. Réglez chaque classe sur la page de l’agent dans Agents, comme pour les commandes. La carte d’approbation montre l’hôte, l’opération et le chemin, et pour une écriture le texte qui entre dans le fichier. Les octets qui ne sont pas du texte apparaissent avec leur taille et leur SHA-256.
L’utiliser depuis un agent
list_access nomme les deux outils de fichiers de l’hôte. _sftp_read ne prend que des lectures, un client peut donc l’autoriser une fois. _sftp_write prend toutes les opérations.
| Argument | Sens |
|---|---|
op | list, stat, read, write, overwrite, mkdir, rename, delete ou rmdir. Obligatoire. |
path | Le fichier ou le répertoire : chemin absolu, ou relatif au répertoire de connexion. Obligatoire. |
to | rename : le nouveau chemin. Un renommage ne remplace jamais un fichier déjà présent. |
offset, length | read : la partie du fichier à lire. |
content, content_base64 | write, overwrite : le fichier en texte, ou ses octets en base64. write crée un nouveau fichier et ne remplace jamais un fichier existant ; overwrite remplace le fichier entier, avec une seule carte à approuver. |
intent | Une phrase sur la raison, montrée à la personne qui approuve. |
call_id | Reprend un appel qui attend une approbation. |
max_inline_bytes | Ce qui arrive dans la réponse. 24 Kio par défaut ; fetch_body lit le reste. |
_sftp_write{
"op": "write",
"path": "upload/ledger.csv",
"content": "id,amount\n1,100.50\n",
"intent": "Send the September ledger to the bank"
}Les gros fichiers en HTTP
Un fichier trop gros pour un appel MCP passe par le proxy HTTP avec le jeton de l’agent. Le chemin après l’id de la connexion est le chemin absolu du fichier, et la méthode est l’opération. Un téléchargement arrive en flux à mesure que le serveur l’envoie, et un envoi accepte jusqu’à 32 Mio.
| Requête | Opération |
|---|---|
GET /p/{id}/srv/report.csv | read. Ajoutez ?offset= et &length= pour une partie. |
GET /p/{id}/srv/reports/ | list : une barre oblique à la fin. |
HEAD /p/{id}/srv/report.csv | stat |
PUT /p/{id}/upload/ledger.csv | write ; avec ?op=overwrite, overwrite. Le corps est le fichier. |
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. Avec une barre oblique à la fin, 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"Lire le résultat
- Une lecture répond avec
contentquand le fichier est du texte etcontent_base64sinon, avecfile_size. - Une liste répond avec
entries: nom, type, taille, droits et heure de modification.statrépond avec uneentry. - Un refus du serveur est la réponse, et rien d’autre n’a été fait :
no_such_file,permission_denied,already_exists,is_a_directoryoufailure, avec le message du serveur. Sur/p/, il arrive en 404, 403 ou 409. - Ouvrez l’appel dans Activité pour voir « Résultat de l’opération sur le fichier » : la cible, le chemin et les octets transférés. Le journal garde l’opération et le chemin, jamais le contenu du fichier.