/ Каталог / Песочница / Filesystem
● Официальный modelcontextprotocol ⚡ Сразу

Filesystem

автор modelcontextprotocol · modelcontextprotocol/servers

Предоставьте Claude изолированный доступ на чтение/запись в один каталог — рефакторьте код, обрабатывайте документы, анализируйте логи без вызова shell.

Эталонный Filesystem MCP. Монтирует один или несколько каталогов в качестве корневых; каждый вызов инструмента строго привязан к этим корневым каталогам, поэтому Claude не может обойти защиту через ../ и добраться до ваших SSH-ключей. Поддерживает текстовые, двоичные файлы, поиск и редактирование по строкам. Причина, по которой это наиболее установленный MCP.

Зачем использовать

Ключевые функции

Живое демо

Как выглядит на практике

filesystem.replay ▶ готово
0/0

Установка

Выберите клиент

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  }
}

Откройте Claude Desktop → Settings → Developer → Edit Config. Перезапустите после сохранения.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  }
}

Cursor использует ту же схему mcpServers, что и Claude Desktop. Конфиг проекта приоритетнее глобального.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  }
}

Щёлкните значок MCP Servers на боковой панели Cline, затем "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  }
}

Тот же формат, что и Claude Desktop. Перезапустите Windsurf для применения.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "filesystem",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  ]
}

Continue использует массив объектов серверов, а не map.

~/.config/zed/settings.json
{
  "context_servers": {
    "filesystem": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@modelcontextprotocol/server-filesystem",
          "/workspace"
        ]
      }
    }
  }
}

Добавьте в context_servers. Zed перезагружается автоматически.

claude mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem /workspace

Однострочная команда. Проверить: claude mcp list. Удалить: claude mcp remove.

Сценарии использования

Реальные сценарии: Filesystem

Как рефакторить функцию во всей кодовой базе без нарушений

👤 Инженеры, переименовывающие или изменяющие API, который используется в множестве файлов ⏱ ~20 min intermediate

Когда использовать: Вам нужно переименовать функцию, изменить её сигнатуру или встроить вспомогательную функцию — и она используется более чем в 30 файлах репозитория.

Предварительные требования
  • Чистое рабочее дерево gitgit status не показывает никаких поставленных на сцену изменений — чтобы вы могли использовать git diff для просмотра и git restore при необходимости
  • Корневой каталог файловой системы ограничен репозиторием — Запустите с помощью npx -y @modelcontextprotocol/server-filesystem /abs/path/to/repo
Поток
  1. Найдите каждое место вызова
    Выполните поиск в кодовой базе для каждого использования getUserProfile(. Сгруппируйте совпадения по файлам и дайте мне количество совпадений для каждого файла.✓ Скопировано
    → Список файлов с количеством совпадений, без учета различия между тестами и исходным кодом
  2. Выполните сухой запуск редактирования в одном файле
    Покажите мне, как будет выглядеть редактирование в src/api/users.ts — дифф, а не полный файл. Пока не пишите.✓ Скопировано
    → Минимальный дифф патч, а не полная переписка файла
  3. Примените ко всем файлам и отчитайтесь
    Примените одно и то же преобразование ко всем файлам из шага 1. Используйте edit_file (редактирование по строкам), а не write_file (перезапись). Сообщите мне о любых файлах, где шаблон не совпадает чисто.✓ Скопировано
    → Журнал успеха/пропуска для каждого файла

Итог: Сфокусированный проверяемый git дифф, против которого вы можете запустить тесты — без неожиданных полных переписок файлов.

Подводные камни
  • Claude использует write_file и молча теряет половину файла, когда редактирование сложное — Явно требуйте edit_file для внутриместных изменений; разрешайте write_file только для вновь создаваемых файлов
  • Совпадение попадает на несвязанный код (например getUserProfileAvatar) — Привяжите поиск: getUserProfile( с закрывающей скобкой или используйте регулярное выражение с границей слова
Сочетать с: git · github

Классифицируйте сбой, читая локальные файлы журнала production

👤 Инженеры по поддержке с логами на диске ⏱ ~15 min beginner

Когда использовать: Вы скачали пакет логов из инцидента клиента и вам нужно найти нужный фрагмент без использования grep.

Предварительные требования
  • Логи на диске — Загрузите/распакуйте в выделённую папку /incidents/<ticket>/
Поток
  1. Получите обзор структуры
    Выведите список файлов под /incidents/TICKET-1234/. Для каждого файла журнала покажите размер и первую + последнюю временную метку внутри.✓ Скопировано
    → Инвентаризация с привязкой ко времени
  2. Найдите кластер ошибок
    Выполните поиск во всех файлах .log для шаблона ERROR|FATAL|panic. Дайте мне 10 минут с наибольшей плотностью совпадений.✓ Скопировано
    → Временное окно сужено до минут, а не часов
  3. Прочитайте контекст вокруг первой FATAL ошибки
    Прочитайте 50 строк контекста вокруг первой строки FATAL в app.log. Объясните, что система делала непосредственно перед сбоем.✓ Скопировано
    → Восстановление повествования, а не простое пересказывание логов

Итог: Пятиточечная временная шкала, которую вы можете вставить в документ инцидента.

Подводные камни
  • Большие файлы журнала (>50МБ) переполняют контекст модели — Запрашивайте только head/tail + извлечение в стиле grep; никогда не просите Claude 'прочитать весь файл' для больших файлов
Сочетать с: sentry · github

Задайте вопросы о папке с PDF, Markdown и документами

👤 Исследователи, аналитики с набором справочных материалов ⏱ ~15 min beginner

Когда использовать: У вас есть 50 документов/контрактов/отчётов в папке и вам нужно извлечь один конкретный факт или сравнить их.

Предварительные требования
  • Документы, организованные в одной папке — Выровняйте в один каталог или неглубокое дерево; Claude лучше работает с плоскими структурами
Поток
  1. Индексируйте папку
    Выведите список всех файлов под /research/2026-market-study/. Для каждого скажите мне имя файла и первые 200 символов.✓ Скопировано
    → Инвентаризация с быстрым просмотром
  2. Задайте реальный вопрос
    Какие из этих документов упоминают 'договорный лимит возмещения убытков'? Для каждого совпадения цитируйте точное предложение и дайте мне имя файла.✓ Скопировано
    → Цитаты с именем файла, а не просто впечатления
  3. Синтез между документами
    Сравните пределы возмещения убытков в трех документах, которые их содержат. Какой является наиболее благоприятным для нас и почему?✓ Скопировано
    → Сравнение бок о бок с прямыми цитатами

Итог: Ответы с цитатами имён файлов и цитат, которые вы можете проверить за 30 секунд.

Подводные камни
  • Сканированные PDF-файлы основаны на изображениях — поиск по содержимому не работает — Сначала запустите OCR (например ocrmypdf) или используйте выделенный PDF MCP; отметьте файлы 'недоступные для поиска' перед началом
  • Claude суммирует и теряет указание источника — Всегда требуйте имя файла + точная цитата в промпте; отклоняйте ответы без этого
Сочетать с: memory

Создайте новый проект из спецификации в одном обороте чата

👤 Инженеры, начинающие новый сервис/библиотеку/прототип ⏱ ~10 min beginner

Когда использовать: У вас есть спецификация в один параграф и вы хотите, чтобы boilerplate (папки, package.json, README, тесты) был создан без копирования из шаблонного репозитория.

Предварительные требования
  • Пустой целевой каталогmkdir /projects/newthing и укажите корневую папку файловой системы на её родительскую папку
Поток
  1. Согласуйте раскладку перед написанием
    Я хочу инструмент CLI TypeScript Node, который делает X. Предложите структуру папок и выведите список всех файлов, которые вы создадите, с указанием назначения в одну строку. Пока не пишите.✓ Скопировано
    → План по файлам — вы можете возразить до записи на диск
  2. Напишите файлы
    Выглядит хорошо. Создайте все эти файлы под /projects/newthing/. Используйте минимальное, идиоматичное содержимое — без комментариев-заполнителей, без заглушек 'TODO'.✓ Скопировано
    → Файлы на диске, компилируется/проверяется линтером чисто с первой попытки
  3. Проверьте, перечитав
    Прочитайте каждый файл, который вы только что создали, и подтвердите, что проект пройдёт tsc --noEmit и npm test. Исправьте всё, что не пройдёт.✓ Скопировано
    → Самопроверка с конкретными исправлениями, а не размахиванием рук

Итог: Работающий скелетный проект за 3 минуты вместо 30.

Подводные камни
  • Claude пишет файлы, а затем забывает, что он написал в середине сеанса — Попросите её сначала создать план файлов, затем писать; перечитывание в конце ловит смещение
Сочетать с: git · github

Комбинации

Сочетайте с другими MCP — эффект x10

filesystem + github

Редактируйте файлы локально, отправьте ветку и откройте PR без выхода из чата

Исправьте опечатку в src/utils/format.ts:42, затем отправьте новую ветку fix/typo-format и откройте PR с названием 'fix: typo in format.ts'.✓ Скопировано
filesystem + git

Произведите редактирование, проверьте дифф, сделайте коммит — всё внутри Claude

Рефакторьте 3 дублирующихся вспомогательных функции в src/ в одну общую утилиту. Покажите мне дифф перед коммитом, затем сделайте коммит с чистым сообщением.✓ Скопировано
filesystem + sqlite

Прочитайте CSV с диска и загрузите в таблицу SQLite для анализа

Прочитайте /data/orders.csv, определите типы и загрузите в /data/analysis.db в таблицу orders.✓ Скопировано

Инструменты

Что предоставляет этот MCP

ИнструментВходные данныеКогда вызыватьСтоимость
read_text_file path: str, head?: int, tail?: int Читайте текстовый файл; используйте head/tail, чтобы избежать загрузки больших файлов бесплатно
read_media_file path: str Читайте изображения, PDF-файлы, аудио в виде base64 для мультимодального входа бесплатно
read_multiple_files paths: str[] Пакетное чтение связанных файлов за один раз (быстрее, чем N вызовов) бесплатно
write_file path: str, content: str Создайте новый файл или полностью замените его — деструктивная операция бесплатно
edit_file path: str, edits: [{oldText, newText}], dryRun?: bool Более безопасное редактирование по строкам; всегда предпочитайте это write_file для существующих файлов бесплатно
create_directory path: str Создайте каталог (рекурсивный, в стиле mkdir -p) бесплатно
list_directory path: str Неповторяющееся ls бесплатно
directory_tree path: str Обзор структуры проекта с одного взгляда бесплатно
move_file source: str, destination: str Переименуйте или переместите бесплатно
search_files path: str, pattern: str, excludePatterns?: str[] Рекурсивный поиск содержимого — как grep бесплатно
get_file_info path: str Получите информацию о файле без чтения содержимого бесплатно
list_allowed_directories нет Подтвердите, с какими корневыми каталогами был запущен сервер бесплатно

Стоимость и лимиты

Во что обходится

Квота API
Неограниченно — это локальный I/O
Токенов на вызов
Зависит от размера файла — бюджетируйте ~1 токен на 4 символа содержимого файла
Деньги
Бесплатно
Совет
Используйте search_files и head/tail вместо чтения целых файлов. Журнал размером 2МБ, выгруженный в контекст, стоит ~500k токенов.

Безопасность

Права, секреты, радиус поражения

Минимальные скоупы: filesystem-read filesystem-write (если мутирует)
Хранение учётных данных: Нет учётных данных — доступ осуществляется через корневые каталоги, переданные в качестве аргументов
Исходящий трафик: Нет с сервера — содержимое файлов отправляется вашему поставщику LLM через клиент MCP в виде контекста
Никогда не давайте: root=/ root=$HOME root=/etc или /var

Устранение неполадок

Частые ошибки и исправления

Error: Path is not within allowed directories

Файл находится вне каждого корневого каталога, переданного при запуске. Перезагрузите сервер с дополнительным аргументом корня или используйте list_allowed_directories, чтобы увидеть, что действительно разрешено.

Проверить: Попросите Claude вызвать `list_allowed_directories`
ENOENT: no such file or directory

Опечатка в пути или неправильное предположение о рабочем каталоге. Используйте directory_tree на корне, чтобы увидеть реальную раскладку.

edit_file: oldText not found

Шаблон oldText должен совпадать точно, включая пробелы. Попросите Claude сначала использовать read_text_file и скопировать точную подстроку.

Huge file freezes the client

Не читайте полностью файлы размером больше нескольких МБ. Используйте параметры head/tail в read_text_file или search_files, чтобы найти только нужные строки.

Проверить: Сначала проверьте размер файла с помощью `get_file_info`

Альтернативы

Filesystem в сравнении

АльтернативаКогда использоватьКомпромисс
git MCPВам нужны операции, зависящие от версий (diff, blame, log), а не сырой файловый I/OНет инструментов записи; только для чтения через призму git
GitHub MCPФайлы находятся в удалённом репозитории и вы не хотите локального клонаТребует PAT; задержка для каждого файла намного выше, чем для локального диска
JetBrains MCPВы хотите, чтобы редактирование появилось в работающем экземпляре IDE с инструментами рефакторингаТребует открытой JetBrains IDE; тяжелее, чем простая файловая система

Ещё

Ресурсы

📖 Читать официальный README на GitHub

🐙 Открытые задачи

🔍 Все 400+ MCP-серверов и Skills