Перейти к содержимому
Выберите тему

Filesystem

Filesystem - эталонный MCP-сервер для работы с файлами в разрешённых каталогах. Пакет @modelcontextprotocol/server-filesystem, 14 инструментов, только stdio

сверено с первичными источниками 4 октября 2026

README сервера называет его сервером на Node.js для действий с файловой системой: чтение и запись файлов, создание и просмотр каталогов, перемещение, поиск, сведения о файле.

Проект относит Filesystem к эталонным реализациям. По корневому README, это учебные примеры, а не готовые решения для промышленной эксплуатации, и разработчикам следует самим оценить требования к безопасности.

Настройка клиента: Filesystem с двумя разрешёнными каталогами
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/username/Desktop",
"/path/to/other/allowed/dir"
]
}
}
}

Пример взят из документации выпуска 2026.8.31 и здесь не запускался.

Каждый путь после имени пакета - разрешённый каталог. README описывает и запуск в Docker: каталоги подключаются внутрь /projects, а пометка ro делает каталог доступным только для чтения.

README описывает два способа задать разрешённые каталоги.

  1. Аргументы запуска. Каталоги перечислены в команде.
  2. Roots. Клиент, который поддерживает Roots, передаёт каталоги сам. README называет этот способ рекомендуемым: каталоги можно менять без перезапуска сервера, через уведомление notifications/roots/list_changed.

Три правила из README, на которые стоит обратить внимание:

  • каталоги из Roots полностью заменяют каталоги из аргументов запуска;
  • если сервер запущен без аргументов, а клиент не поддерживает Roots или прислал пустой список, сервер завершит инициализацию с ошибкой;
  • сервер разрешает действия только внутри каталогов, заданных аргументами или через Roots.

Имена сверены с файлом index.ts и с опубликованным пакетом 2026.8.31: набор совпадает. Описания - по README.

Инструмент Что делает Изменяет данные
read_text_file читает файл как текст UTF-8; можно взять первые или последние N строк нет
read_file устарел; описание в коде: «DEPRECATED: Use read_text_file instead» нет
read_media_file возвращает файл в base64 с типом MIME; изображения и звук - как image и audio нет
read_multiple_files читает несколько файлов; неудача с одним не останавливает остальные нет
list_directory содержимое каталога с пометками [FILE] и [DIR] нет
list_directory_with_sizes то же с размерами файлов и итогом нет
directory_tree дерево каталога в JSON нет
search_files рекурсивный поиск по шаблону нет
get_file_info размер, время создания и изменения, тип, права нет
list_allowed_directories список каталогов, доступных серверу нет
create_directory создаёт каталог вместе с родительскими; если каталог есть - ничего не делает да
write_file создаёт файл или перезаписывает существующий да
edit_file точечные правки по образцу текста; есть пробный режим dryRun да
move_file перемещает или переименовывает; не срабатывает, если цель существует да

Ресурсов и промптов сервер не объявляет.

README сообщает, что сервер ставит на каждый инструмент аннотации: readOnlyHint, idempotentHint, destructiveHint. Все инструменты получают openWorldHint: false - сервер работает только с локальными файлами.

Инструмент readOnlyHint idempotentHint destructiveHint
девять инструментов чтения (все из таблицы выше, кроме read_file: в таблице README его нет) true - -
create_directory false true false
write_file false true true
edit_file false false true
move_file false false true

Аннотации - подсказки, а не защита. Спецификация требует: клиент обязан считать аннотации инструментов недоверенными, если они получены не от доверенного сервера (раздел Tools).

Только stdio: в исходном коде используется один транспорт StdioServerTransport.

Номер Суть Затронуты версии Исправлено в
CVE-2025-53109 обход проверки пути через сравнение по началу строки и символические ссылки 0.6.2 и ниже; от 2025.1.14 до 2025.7.1 2025.7.1
CVE-2025-53110 обход проверки пути через каталог с совпадающим началом имени 0.6.2 и ниже; от 2025.1.14 до 2025.7.1 2025.7.1

Обе записи опубликованы 1 июля 2025 года с уровнем «высокий». В README сервера они не упомянуты, поэтому проверять установленную версию приходится самому: исправление вошло в 2025.7.1, версии из указанных диапазонов ниже неё затронуты.

  • Перед действием путь приводится к настоящему (через realpath), и символическая ссылка, ведущая за пределы разрешённых каталогов, отклоняется - это видно в файле lib.ts.
  • README просит осторожности с write_file и советует сначала вызывать edit_file в режиме dryRun.

Сервер получает столько, сколько вы ему разрешили. Разрешённый домашний каталог целиком - это и ключи, и настройки программ. Давайте самый узкий каталог, а для чтения - подключение только на чтение. Ограничения на уровне операционной системы и контейнера - практика, не правило MCP.

Сервер не заявляет, по какой редакции протокола он работает. В README есть одна ссылка на страницу спецификации редакции 2025-03-26 - там, где объясняются аннотации инструментов. Ссылка на документ - не заявление о поддержке.

В зависимостях опубликованного пакета 2026.8.31 стоит @modelcontextprotocol/sdk ^1.30.0. Это факт о пакете. Вывода о редакции протокола из него этот сайт не делает.