Project Navigator MCP Server
Integrates with VS Code's GitHub Copilot Agent Mode to provide the same codebase navigation capabilities, enabling AI-powered code exploration and safe command execution.
Project Navigator MCP Server
MCP-сервер для навигации по кодовой базе. Позволяет AI-агенту в IDE самостоятельно исследовать проект: просматривать файлы, искать символы и запускать безопасные команды — без ручного копирования кода в чат.
Как работает MCP
IDE запускает MCP-сервер как дочерний процесс и общается с ним через stdin/stdout. Агент вызывает инструменты (tools) — типизированные функции с описанием и схемой параметров. Это позволяет агенту автономно получать контекст из внешних источников (файловая система, команды) вместо того, чтобы ждать, пока пользователь всё скопирует вручную.
В этом сервере tool — это изолированная функция с именем, описанием, JSON-схемой входных параметров и структурированным JSON-ответом.
Related MCP server: Local Explorer MCP
Инструменты
Инструмент | Описание |
| Список файлов и папок в директории |
| Чтение содержимого файла (опционально — диапазон строк) |
| Поиск файлов по glob-паттерну ( |
| Полнотекстовый поиск по файлам проекта |
| Запуск команды из whitelist |
Tool outputs contract
Все инструменты возвращают структурированный JSON:
// list_directory
{ entries: Array<{ name: string; type: "file" | "dir"; path: string }> }
// read_file
{ content: string; total_lines: number; path: string }
// find_files
{ files: string[]; count: number }
// search_code
{ matches: Array<{ file: string; line: number; content: string }>; count: number }
// run_command
{ stdout: string; stderr: string; exit_code: number; success: boolean }Ошибки возвращаются через стандартный MCP error response.
Структура проекта
src/
index.ts ← bootstrap (env → startServer)
server.ts ← McpServer, регистрация инструментов
logger/
index.ts ← logCall / logSuccess / logError → stderr
index.test.ts
security/
index.ts ← assertInProjectRoot (path traversal guard)
index.test.ts
tools/
list-directory/index.ts + index.test.ts
read-file/index.ts + index.test.ts
find-files/index.ts + index.test.ts
search-code/index.ts + index.test.ts
run-command/index.ts + index.test.tsЗапуск через Docker (рекомендуется)
Node.js на машине не нужен.
docker build -t project-navigator-mcp .Проверка (smoke test):
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \
| docker run --rm -i project-navigator-mcpОжидаемый результат — JSON с 5 инструментами: list_directory, read_file, find_files, search_code, run_command.
Ограничение
run_commandв Docker: инструмент запускает команды в директорииPROJECT_ROOT. Еслиnode_modulesцелевого проекта установлен на другой ОС (например, macOS), нативные биндинги (rolldown,esbuildи т.п.) не будут работать внутри Linux-контейнера. В этом случаеnpm testупадёт с ошибкой о нативном модуле — это ограничение окружения, не сервера. Для запуска тестов используйте Node.js-вариант (без Docker) или предварительно выполнитеnpm installв целевом проекте внутри контейнера.
Интеграция с агентами и IDE
MCP — открытый протокол. Сервер работает с любым MCP-совместимым клиентом; меняется только путь к конфиг-файлу и название ключа.
Во всех примерах замените /ABSOLUTE/PATH/TO/PROJECT на абсолютный путь к проекту, который хотите исследовать.
Без Docker: замените блок
"command": "docker", "args": ["run", ...]на"command": "node", "args": ["/path/to/simple-mcp-server/dist/index.js"]и добавьте"env": { "PROJECT_ROOT": "/path/to/project" }.
Claude Code
Добавьте один раз в глобальный ~/.claude/settings.json:
{
"mcpServers": {
"project-navigator": {
"command": "sh",
"args": ["-c", "docker run --rm -i -v \"$(pwd):/project:ro\" -e PROJECT_ROOT=/project project-navigator-mcp"]
}
}
}$(pwd) автоматически подставляет директорию, из которой запущен Claude Code — путь к проекту указывать не нужно. Просто откройте любой проект и начните новый разговор:
cd /any/project
claudeВажно: если конфиг добавлен на уровне проекта (
.claude/settings.json), но сервер не появляется — добавьте его в глобальный~/.claude/settings.json. Также убедитесь, что начали новый разговор — MCP-серверы регистрируются при старте сессии.
Claude Desktop
Claude Desktop не привязан к директории проекта, поэтому путь нужно указать явно.
Файл:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"project-navigator": {
"command": "sh",
"args": ["-c", "docker run --rm -i -v \"/ABSOLUTE/PATH/TO/PROJECT:/project:ro\" -e PROJECT_ROOT=/project project-navigator-mcp"]
}
}
}Замените /ABSOLUTE/PATH/TO/PROJECT на путь к нужному проекту. Перезапустите Claude Desktop.
VS Code (GitHub Copilot Agent Mode)
Требует VS Code 1.99+ с GitHub Copilot.
Файл: .vscode/mcp.json в целевом проекте (добавьте в репозиторий — будет работать у всех участников).
{
"servers": {
"project-navigator": {
"type": "stdio",
"command": "sh",
"cwd": "${workspaceFolder}",
"args": ["-c", "docker run --rm -i -v \"$(pwd):/project:ro\" -e PROJECT_ROOT=/project project-navigator-mcp"]
}
}
}${workspaceFolder} — встроенная переменная VS Code, автоматически подставляет корень открытого проекта. Путь указывать не нужно.
Откройте Copilot Chat → переключитесь в режим Agent → сервер подключится автоматически.
Отличие от других клиентов: ключ
"servers"(не"mcpServers"), обязательное"type": "stdio"и поддержка"cwd"с переменными.
Cursor
Файл: ~/.cursor/mcp.json (глобально) или .cursor/mcp.json (в проекте)
{
"mcpServers": {
"project-navigator": {
"command": "sh",
"args": ["-c", "docker run --rm -i -v \"$(pwd):/project:ro\" -e PROJECT_ROOT=/project project-navigator-mcp"]
}
}
}Cursor запускает MCP-сервер с cwd = корень открытого проекта, поэтому $(pwd) подставляется автоматически. Перезапустите Cursor — инструменты появятся в Cursor Agent.
Запуск без Docker
npm install
npm run buildПроверка:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | node dist/index.jsСоздайте .env (по образцу .env.example):
PROJECT_ROOT=/path/to/your/project
ALLOWED_COMMANDS=npm run build,npm test,npm run lint,npm run dev,npx tsc --noEmitБезопасность
Файловые инструменты ограничены папкой
PROJECT_ROOT— выход за пределы возвращает ошибкуread_fileне читает файлы с именем.env*run_commandиспользуетchild_process.spawn(неexec), команда проверяется по точному совпадению с whitelist — shell-инъекции невозможны
Логи
Сервер пишет в stderr:
[CALL] list_directory { "path": "src" }
[SUCCESS] list_directory duration=12ms
[CALL] run_command { "command": "rm -rf /" }
[ERROR] run_command reason="command not in whitelist"В логах никогда не появляется содержимое файлов и вывод команд — только метаданные вызова.
Demo сценарии
# | Запрос | Инструмент |
1 | «Покажи структуру папки src» |
|
2 | «Найди все TypeScript файлы в проекте» |
|
3 | «Где используется |
|
4 | «Покажи строки 1–30 файла server.ts» |
|
5 | «Запусти тесты» |
|
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hrustalevdev/simple-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server