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: Code Search, Read & PR Analysis
Инструменты
Инструмент | Описание |
| Список файлов и папок в директории |
| Чтение содержимого файла (опционально — диапазон строк) |
| Поиск файлов по 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 | «Запусти тесты» |
|
Available Tools
5 toolsfind_filesA
Find files by glob pattern within the project. Example pattern: "**/*.ts"
Inputs: pattern (required), directory.
list_directoryB
List files and folders in a directory within the project
Inputs: path.
read_fileA
Read file contents. Line numbers are 1-indexed.
Inputs: path (required), start_line, end_line.
run_commandA
Run a whitelisted shell command. Allowed commands: npm run build, npm test, npm run lint, npm run dev, npx tsc --noEmit
Inputs: command (required).
search_codeB
Full-text search across project files
Inputs: query (required), directory, file_pattern.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: find_files locates files by pattern, list_directory lists directory contents, read_file reads file contents, run_command executes commands, and search_code does full-text search. No overlapping functionality.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., find_files, list_directory), making them predictable and easy to understand.
With 5 tools covering file discovery, browsing, reading, searching, and command execution, the count is well-scoped for a project navigator, neither too few nor excessive.
The tool set covers core navigation and search needs, and the ability to run whitelisted commands adds flexibility. Missing write/delete operations, but these are typically out of scope for a navigator, so only minor gaps.
Maintenance
Related MCP Connectors
Persistent cloud workspaces for AI agents: run commands, edit files, use git and a browser.
Securely search and manage workspace context files for AI agents and teams.
Code-map tools for AI agents: see a repo's structure first, then edit only what matters.
Codebase intelligence for agents: 152 structured artifacts across 21 programs, one call.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to safely explore directories, read files, search content by pattern or filename, and edit files with checksum verification and dry-run preview within sandboxed filesystem access.68 npm76ISC
- FlicenseBqualityDmaintenanceEnables LLMs to search and read files in local and GitHub repositories, analyze pull request diffs, and grep code content with built-in security protections.6-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to generate annotated file trees, retrieve file statistics, list git-changed files, and read file contents from local directories or GitHub repositories.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to safely list, read, and search files within a restricted local workspace, with safeguards against path traversal and configurable size limits.MIT