Перейти к документации
ДокументацияФайлы по SFTP

Файлы по SFTP

Дайте агенту смотреть, читать, записывать и перемещать файлы на вашем сервере, а закрытый ключ оставьте у Sallyport.

На этой странице

Каждый подключённый SSH-хост служит и файловым сервером для ваших агентов. Sallyport входит с вашим ключом, выполняет операцию с файлом и возвращает результат. Ключ агент не видит, а каждая операция попадает в журнал.

Настройка

Ничего добавлять не нужно. Один раз подключите SSH-хост: одно подключение, один ключ и один ключ сервера обслуживают и команды, и файлы. На сервере нужна подсистема SFTP, в OpenSSH она включена по умолчанию.

Выберите, какие операции ждут вас

ОперацияКласс
list, stat, readЧтение. Чтение закрытого ключа, .env, файла паролей или пути с .. считается изменением.
write, mkdir, renameИзменение
overwrite, delete, rmdirНеобратимое

По умолчанию операции с файлами выполняются без вопросов. Настройте каждый класс на странице агента в разделе Агенты, как для команд. Карточка подтверждения показывает хост, операцию и путь, а для записи ещё и текст, который попадёт в файл. Байты, которые не являются текстом, показаны размером и SHA-256.

Работа из агента

list_access называет два файловых инструмента хоста. _sftp_read принимает только чтение, и клиент может разрешить его один раз. _sftp_write принимает любые операции.

АргументЗначение
oplist, stat, read, write, overwrite, mkdir, rename, delete или rmdir. Обязательный.
pathФайл или каталог: абсолютный путь или путь от каталога входа. Обязательный.
torename: новый путь. Переименование никогда не заменяет уже существующий файл.
offset, lengthread: какую часть файла прочитать.
content, content_base64write, overwrite: файл текстом или его байты в base64. write создаёт новый файл и не заменяет существующий; overwrite заменяет файл целиком, одной карточкой на одобрение.
intentОдно предложение о цели вызова, его видит подтверждающий.
call_idПродолжает вызов, который ждёт подтверждения.
max_inline_bytesСколько приходит в ответе. По умолчанию 24 КиБ, остальное читает fetch_body.
Аргументы вызова _sftp_write
{
  "op": "write",
  "path": "upload/ledger.csv",
  "content": "id,amount\n1,100.50\n",
  "intent": "Send the September ledger to the bank"
}

Большие файлы через HTTP

Файл, который не помещается в один вызов MCP, идёт через HTTP-прокси с токеном агента. Путь после id подключения задаёт абсолютный путь файла, а метод задаёт операцию. Скачивание идёт потоком по мере того, как сервер отдаёт файл, а загрузка принимает до 32 МиБ.

ЗапросОперация
GET /p/{id}/srv/report.csvread. Для части добавьте ?offset= и &length=.
GET /p/{id}/srv/reports/list: косая черта в конце.
HEAD /p/{id}/srv/report.csvstat
PUT /p/{id}/upload/ledger.csvwrite, а с ?op=overwrite это overwrite. Тело запроса и есть файл.
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. С косой чертой в конце это rmdir.
Shell · загрузите файл, затем скачайте его
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"

Прочитайте результат

  • Чтение возвращает content, если файл текстовый, и content_base64, если нет, а также file_size.
  • Список каталога возвращает entries: имя, тип, размер, права и время изменения. stat возвращает одну запись entry.
  • Отказ сервера считается ответом, и больше ничего не сделано: no_such_file, permission_denied, already_exists, is_a_directory или failure с сообщением сервера. Через /p/ он приходит как 404, 403 или 409.
  • Откройте вызов в разделе История вызовов, чтобы увидеть «Результат операции с файлом»: цель, путь и сколько байт передано. Журнал хранит операцию и путь, но никогда не содержимое файла.