MCP Code RAG Server — это сервер для интеллектуального поиска и анализа кода с использованием векторного поиска. Он позволяет задавать вопросы на естественном языке о вашей кодобазе и получать релевантные фрагменты кода.
- Векторный поиск по кодебазе на основе семантической схожести
- Инкрементальная индексация для быстрого обновления при изменениях
- Различные стратегии чанкинга: truncate, fixed-size, AST-based
- Локальное хранение данных в LanceDB
- Мультязычная поддержка (Go, Python, JavaScript и др.)
Убедитесь, что у вас установлен Go 1.21 или выше:
go versionЕсли нет, установите с https://go.dev/dl/
git clone https://github.com/yourusername/mcp-code-rag.git
cd mcp-code-raggo mod download
go mod tidymake buildЭто создаст бинарный файл в build/mcp-code-rag-server
./build/mcp-code-rag-server -config=config/test-config.yamlСервер запустится и будет готов к приему запросов.
{
"extensions": [
{
"name": "mcp-code-rag",
"type": "stdio",
"command": "/path/to/mcp-code-rag-server"
}
]
}В конфигурации Continue добавьте:
{
"extensions": [
{
"name": "code-rag",
"type": "stdio",
"command": "/path/to/mcp-code-rag-server"
}
]
}После индексации вы можете задавать вопросы:
- "как работает аутентификация" - покажет код JWT токенов
- "структура пользователя" - покажет модель User
- "помощники и утилиты" - вернет функции из helpers.go
Создайте файл config.yaml:
codebase_path: "./my-repo" # Путь к вашему кодебазе
database_path: "./data/index.lance" # Путь к базе данных
embedding:
model_name: "sentence-transformers/all-MiniLM-L6-v2"
use_ollama: false # true для использования Ollama
chunking:
strategy: "fixed-size" # truncate, fixed-size, ast-based
max_chunk_size: 2048 # Максимальный размер чанка (символы)
overlap_size: 256 # Перекрытие между чанками
search:
default_limit: 10 # Количество результатов по умолчанию
similarity_threshold: 0.3 # Порог схожести (0.0-1.0)| Команда | Описание |
|---|---|
make build |
Собрать проект для текущей платформы |
make cross-build |
Собрать бинарники для всех платформ (Linux, macOS, Windows) |
make run |
Запустить сервер локально |
make test |
Запустить все тесты |
make fmt |
Отформатировать код |
make lint |
Проверить код линтером |
make clean |
Очистить бинарники и временные файлы |
GOOS=linux GOARCH=amd64 go build -o mcp-code-rag-server-linux ./cmd/serverGOOS=darwin GOARCH=arm64 go build -o mcp-code-rag-server-macos-arm64 ./cmd/serverGOOS=windows GOARCH=amd64 go build -o mcp-code-rag-server-windows.exe ./cmd/serverИли используйте готовую команду:
make cross-buildЭто создаст все бинарники в директории dist/.
mcp-code-rag/
├── cmd/server/ # Точка входа приложения
│ └── main.go
├── internal/ # Приватный код
│ ├── chunking/ # Стратегии чанкинга
│ │ ├── chunker.go # Интерфейс
│ │ ├── truncate.go # Truncate стратегия
│ │ └── fixed_size.go# Fixed-size стратегия
│ ├── embedding/ # Генерация эмбеддингов
│ │ ├── embedder.go # Интерфейс
│ │ └── mock.go # Mock реализация для тестов
│ ├── db/ # Работа с базой данных
│ │ ├── database.go # Интерфейс БД
│ │ └── mock.go # Mock реализация
│ └── mcp/ # MCP протокол
│ ├── types.go # Типы данных
│ └── server.go # Серверная логика
├── config/ # Конфигурация
│ ├── config.go # Загрузка конфигурации
│ ├── config.yaml # Основной конфиг
│ └── test-config.yaml # Тестовый конфиг
├── example-repo/ # Пример кодебазы для тестирования
├── docs/ # Документация
├── build/ # Собранные бинарники (генерируется)
├── dist/ # Релизные бинарники (генерируется)
└── data/ # Данные LanceDB (генерируется)
go test -v ./...
# Или
make testgo fmt ./...
# Или
make fmtgo install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
golangci-lint run
# Или
make lintexport LOG_LEVEL=debug
./build/mcp-code-rag-serverИспользуйте встроенную проверку:
if err := db.HealthCheck(ctx); err != nil {
log.Printf("Database health check failed: %v", err)
}Убедитесь, что все зависимости установлены:
go mod download
go mod tidyЕсли база данных повреждена:
rm -rf ./data/index.lance
# Перезапустите сервер для создания новой базы
./build/mcp-code-rag-serverПроверьте права на выполнение:
chmod +x build/mcp-code-rag-serverИспользуйте go run вместо бинарника:
go run ./cmd/server- Изучите документацию в директории
docs/ - Попробуйте разные стратегии чанкинга и модели эмбеддингов
- Интегрируйте с MCP клиентом вашей IDE
- Настройте автоматическую индексацию при изменениях кода
Если у вас возникли проблемы:
- Проверьте документацию в
docs/ - Откройте issue на GitHub с описанием проблемы
- Изучите логи сервера при включенном debug режиме
Удачной работы с вашим кодом! 🚀