Файлы по 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 принимает любые операции.
| Аргумент | Значение |
|---|---|
op | list, stat, read, write, overwrite, mkdir, rename, delete или rmdir. Обязательный. |
path | Файл или каталог: абсолютный путь или путь от каталога входа. Обязательный. |
to | rename: новый путь. Переименование никогда не заменяет уже существующий файл. |
offset, length | read: какую часть файла прочитать. |
content, content_base64 | write, 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.csv | read. Для части добавьте ?offset= и &length=. |
GET /p/{id}/srv/reports/ | list: косая черта в конце. |
HEAD /p/{id}/srv/report.csv | stat |
PUT /p/{id}/upload/ledger.csv | write, а с ?op=overwrite это overwrite. Тело запроса и есть файл. |
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. С косой чертой в конце это 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"Прочитайте результат
- Чтение возвращает
content, если файл текстовый, иcontent_base64, если нет, а такжеfile_size. - Список каталога возвращает
entries: имя, тип, размер, права и время изменения.statвозвращает одну записьentry. - Отказ сервера считается ответом, и больше ничего не сделано:
no_such_file,permission_denied,already_exists,is_a_directoryилиfailureс сообщением сервера. Через/p/он приходит как 404, 403 или 409. - Откройте вызов в разделе История вызовов, чтобы увидеть «Результат операции с файлом»: цель, путь и сколько байт передано. Журнал хранит операцию и путь, но никогда не содержимое файла.