Aller à la documentation
DocumentationFichiers en SFTP

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érationClasse
list, stat, readLecture. 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, rmdirDestructive

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.

ArgumentSens
oplist, stat, read, write, overwrite, mkdir, rename, delete ou rmdir. Obligatoire.
pathLe fichier ou le répertoire : chemin absolu, ou relatif au répertoire de connexion. Obligatoire.
torename : le nouveau chemin. Un renommage ne remplace jamais un fichier déjà présent.
offset, lengthread : la partie du fichier à lire.
content, content_base64write, 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.
intentUne phrase sur la raison, montrée à la personne qui approuve.
call_idReprend un appel qui attend une approbation.
max_inline_bytesCe qui arrive dans la réponse. 24 Kio par défaut ; fetch_body lit le reste.
Arguments d’un appel à _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êteOpération
GET /p/{id}/srv/report.csvread. Ajoutez ?offset= et &length= pour une partie.
GET /p/{id}/srv/reports/list : une barre oblique à la fin.
HEAD /p/{id}/srv/report.csvstat
PUT /p/{id}/upload/ledger.csvwrite ; avec ?op=overwrite, overwrite. Le corps est le fichier.
POST /p/{id}/upload/2026?op=mkdirmkdir
POST /p/{id}/inbox/a.xml?op=rename&to=/archive/a.xmlrename
DELETE /p/{id}/inbox/a.xmldelete. Avec une barre oblique à la fin, rmdir.
Shell · envoyez un fichier, puis téléchargez-le
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 content quand le fichier est du texte et content_base64 sinon, avec file_size.
  • Une liste répond avec entries : nom, type, taille, droits et heure de modification. stat répond avec une entry.
  • 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_directory ou failure, 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.