Filesystem
Filesystem - эталонный MCP-сервер для работы с файлами в разрешённых каталогах. Пакет @modelcontextprotocol/server-filesystem, 14 инструментов, только stdio
сверено с первичными источниками 4 октября 2026
Для чего он нужен
Заголовок раздела «Для чего он нужен»README сервера называет его сервером на Node.js для действий с файловой системой: чтение и запись файлов, создание и просмотр каталогов, перемещение, поиск, сведения о файле.
Проект относит Filesystem к эталонным реализациям. По корневому README, это учебные примеры, а не готовые решения для промышленной эксплуатации, и разработчикам следует самим оценить требования к безопасности.
{ "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 описывает два способа задать разрешённые каталоги.
- Аргументы запуска. Каталоги перечислены в команде.
- 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. Это факт о пакете. Вывода о редакции протокола из него этот сайт не делает.
Что читать дальше
Заголовок раздела «Что читать дальше»- Эталонные серверы - все семь серверов.
- Инциденты - разбор известных уязвимостей в серверах и клиентах.
- Tools - как устроены инструменты и их аннотации.
- Как выбрать и проверить сервер - порядок проверки перед подключением.