FileManager MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FileManager MCP ServerList all files in the gve-server-data project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FileManager MCP Server
MCP-сервер (Streamable HTTP) для read-only доступа ИИ-клиентов к файлам проектов. Проекты, разрешённые каталоги, расширения файлов и ключи доступа описываются в YAML-конфиге — всё, что не указано в конфиге явно, сервер прочитать не может.
Инструменты
Инструмент | Описание |
| Проекты, доступные предъявленному API-ключу: id, название, описание, корневые папки, читаемые расширения, лимиты |
| Содержимое папки проекта; без |
| Чтение текстового файла в UTF-8, с постраничной выдачей по строкам ( |
| Поиск файлов по имени: glob ( |
| Поиск по содержимому файлов (grep) с номерами строк и опциональным контекстом |
| Метаданные файла/папки: тип, размер, даты, расширение, доступность для чтения, число строк |
Инструментов записи нет — сервер физически не умеет изменять файлы.
Related MCP server: TimeVerse Code Reader
Требования
Node.js 18+
Доступ на чтение к каталогам, указанным в конфиге
Установка
npm install
cp .env.example .env # порт, лимиты, значения ключей
cp projects.example.yaml projects.yaml # описание проектов
# отредактировать оба файлаКонфигурация проектов (projects.yaml)
Путь к файлу задаётся переменной PROJECTS_CONFIG (по умолчанию ./projects.yaml).
defaults: # необязательно, лимиты по умолчанию для всех проектов
max_file_size: 1048576
max_entries: 1000
max_depth: 5
projects:
- id: gve-server-data # ^[a-z0-9][a-z0-9_-]*$, уникален
name: Данные игрового сервера
description: |
Конфиги, html-диалоги NPC и csv/yaml-таблицы игрового сервера GVE.
paths: # абсолютные пути, подпапки доступны автоматически
- /root/Gve-Server-Data/data
extensions: [.yaml, .yml, .xml, .html, .htm, .md, .json, .txt]
exclude: # необязательно, glob по виртуальному пути
- "**/secrets/**"
list_unreadable: false # показывать ли файлы с чужими расширениями
max_file_size: 2097152 # необязательный override
api_keys:
- "${FM_KEY_GVE_DATA}" # подстановка из окружения (рекомендуется)Поле | Обязательное | Назначение |
| да | Идентификатор проекта, передаётся в аргументе |
| нет | Человекочитаемое название (по умолчанию |
| нет | Описание для ИИ: что за данные и зачем они нужны |
| да | Абсолютные пути к разрешённым корням; должны существовать и не быть вложены друг в друга |
| да | Расширения, доступные для чтения и поиска ( |
| нет | Дополнительные исключения (glob по виртуальному пути) |
| нет | Показывать в листингах файлы с неразрешёнными расширениями ( |
| нет | Переопределение лимитов проекта |
| да | Ключи доступа к этому проекту, минимум 24 символа; |
Конфиг читается один раз при старте. Любая ошибка валидации (несуществующий путь, короткий ключ,
дублирующийся id, вложенные корни) останавливает запуск — сервер никогда не поднимается
с частично корректным списком разрешений. После изменения YAML нужен рестарт.
Переменные окружения (.env)
Переменная | По умолчанию | Назначение |
|
| Порт MCP-сервера |
|
| Путь к конфигу проектов |
|
| Максимальный размер читаемого файла, байт |
|
| Максимум записей в одном листинге |
|
| Максимальная глубина рекурсивного обхода |
|
| Длинные строки обрезаются до этой длины |
|
| Максимум файлов, просматриваемых в |
|
| Максимум совпадений в ответе |
|
| Бюджет времени на один поиск |
|
| Разрешать ли режим |
Запуск
npm start # прод
npm run dev # с автоперезапуском (--watch)
npm test # тесты модели безопасности (node --test)MCP endpoint:
POST http://<host>:<PORT>/mcp(требует API-ключ)Health check:
GET http://<host>:<PORT>/health— статус и доступность всех корней
Подключение MCP-клиента
{
"mcpServers": {
"filemanager": {
"url": "http://<host>:<PORT>/mcp",
"headers": { "Authorization": "Bearer <API_KEY>" }
}
}
}Ключ можно передавать и в заголовке X-API-Key.
Модель безопасности
Клиент никогда не видит и не передаёт реальные пути файловой системы. Файлы адресуются
виртуальным путём <корень>/<подпапка>/<файл>, где <корень> — имя (basename) одного из
каталогов в paths.
Валидация ввода. Отклоняются пути с
\0, обратным слэшем, двоеточием, сегментами./.., длиной больше 1024 символов.Канонизация и проверка вложенности. Путь разрешается через
fs.realpath, и результат обязан находиться внутри канонизированного корня. Это закрывает и../-обход, и побег по симлинку/junction — в том числе созданному уже после старта сервера. Каждая запись каталога при обходе тоже проходитrealpath; всё, что указывает наружу, молча скрывается.Allowlist расширений. Читать и искать можно только в файлах с расширениями из
extensions.Неотключаемый deny-list поверх allowlist: любые файлы и папки, начинающиеся с точки (
.env,.git,.ssh),node_modules, ключевой материал (*.pem,*.key,id_rsa*,*.jks, …),shadow/passwd/authorized_keys, а также имена сcredentials,api_key,private_key,access_token. Плюс пользовательскиеexclude-глобы.Никаких
exec/spawn. Поиск реализован на NodefsAPI, а не черезgrep/rg, поэтому командной инъекции нет в принципе.Лимиты на размер файла, число записей, глубину обхода, число просматриваемых файлов, количество совпадений, время поиска, длину строки и размер тела HTTP-запроса (256 КБ). Бинарные файлы (NUL в первых 8 КБ) не отдаются.
Изоляция ключей. Ключ привязан к проектам; чужой проект не виден в
list_projectsи сообщаетUnknown projectво всех остальных инструментах. Сравнение ключей —timingSafeEqualпо sha256, с полным проходом по индексу (без утечки по времени).Без утечки путей. В ответах и ошибках фигурируют только виртуальные пути. «Вне корня», «запрещено» и «не существует» дают одинаковое сообщение
Path not found, поэтому API нельзя использовать как оракул для разведки файловой системы. Неожиданные ошибки ФС логируются на сервере, а клиенту отдаётся обобщённое сообщение.Аудит-лог в stdout: ключ (первые 6 символов хеша), инструмент, проект, виртуальный путь, статус, время. Содержимое файлов не логируется.
Рекомендации по эксплуатации: запускать под отдельным пользователем с правами только на чтение
нужных каталогов, в Docker монтировать данные как :ro, ключи хранить в .env
(в YAML — только ${VAR}).
Тесты
npm test (node --test) поднимает временное дерево-песочницу и проверяет модель безопасности:
обход каталогов, абсолютные пути, симлинк наружу, dotfile/ключевой материал, неразрешённое
расширение, превышение размера, бинарный файл, глубину обхода, изоляцию ключей и трансляцию glob.
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only MCP server exposing a user ORANO library to their own AI agent.
Read-only MCP server: let AI agents read your ORANO saved-video library, tasks, and memory.
Public read-only MCP server for Genvernium product and developer resources.
Read-only MCP for AI usage profiles, leaderboards, stats, and docs; no writes or private data.
Related MCP Servers
- AlicenseBqualityDmaintenanceA secure, read-only MCP server for browsing and searching files in a specified directory with path traversal protection and .gitignore support.3MIT
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server for code reading with intelligent caching, line-range selection, and language detection, enabling AI assistants to efficiently and safely explore file systems.MIT
- FlicenseAqualityCmaintenanceA read-only MCP server that enables AI assistants to search files, list directories, retrieve system info, and get file metadata on the local file system.4-
- AlicenseAqualityCmaintenanceRead-only MCP server providing AI access to verifiable web, GitHub, and local sources, plus a managed fantasy entity catalog, with strong security and provenance tracking.101MIT