Code Context MCP Server
Proporciona contexto de código desde repositorios git locales.
Documentación
Servidor MCP de Contexto de Código
Un servidor de Protocolo de Contexto de Modelo (MCP) para proporcionar contexto de código desde repositorios git locales. Este servidor te permite:
- Clonar repositorios git localmente
- Procesar ramas y archivos
- Generar embeddings para fragmentos de código
- Realizar búsqueda semántica sobre el código
Características
- Utiliza repositorios git locales en lugar de la API de GitHub
- Almacena datos en una base de datos SQLite
- Divide el código en fragmentos semánticos
- Genera embeddings para fragmentos de código usando Ollama
- Proporciona búsqueda semántica sobre el código
Requisitos previos
- Node.js (v16+)
- Git
- Ollama con un modelo de embeddings
Instalación
# Clone the repository
git clone <repository-url>
cd code-context-mcp
# Install dependencies
npm install
# Build the project
npm run build
Configuración
Establece las siguientes variables de entorno:
DATA_DIR: Directorio para la base de datos SQLite (predeterminado: '~/.codeContextMcp/data')REPO_CACHE_DIR: Directorio para los repositorios clonados (predeterminado: '~/.codeContextMcp/repos')
Usando Ollama
Para embeddings más rápidos y potentes, puedes usar Ollama:
# Install Ollama from https://ollama.ai/
# Pull an embedding model (unclemusclez/jina-embeddings-v2-base-code is recommended)
ollama pull unclemusclez/jina-embeddings-v2-base-code
Uso
Usando con Claude Desktop
Agrega la siguiente configuración a tu archivo de configuración de Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"code-context-mcp": {
"command": "/path/to/your/node",
"args": ["/path/to/code-context-mcp/dist/index.js"]
}
}
}
Herramientas
El servidor proporciona la siguiente herramienta:
queryRepo
Clona un repositorio, procesa el código y realiza búsqueda semántica:
{
"repoUrl": "https://github.com/username/repo.git",
"branch": "main", // Optional - defaults to repository's default branch
"query": "Your search query",
"keywords": ["keyword1", "keyword2"], // Optional - filter results by keywords
"filePatterns": ["**/*.ts", "src/*.js"], // Optional - filter files by glob patterns
"excludePatterns": ["**/node_modules/**"], // Optional - exclude files by glob patterns
"limit": 10 // Optional - number of results to return, default: 10
}
El parámetro branch es opcional. Si no se proporciona, la herramienta utilizará automáticamente la rama predeterminada del repositorio.
El parámetro keywords es opcional. Si se proporciona, los resultados se filtrarán para incluir solo fragmentos que contengan al menos una de las palabras clave especificadas (coincidencia sin distinción de mayúsculas y minúsculas).
Los parámetros filePatterns y excludePatterns son opcionales. Te permiten filtrar qué archivos se procesan y se buscan usando patrones glob (por ejemplo, **/*.ts para todos los archivos TypeScript).
Esquema de la base de datos
El servidor usa SQLite con el siguiente esquema:
repository: Almacena información sobre los repositoriosbranch: Almacena información sobre las ramasfile: Almacena información sobre los archivosbranch_file_association: Asocia archivos con ramasfile_chunk: Almacena fragmentos de código y sus embeddings
Depuración
Problemas de arquitectura ARM en la serie MAC Mx
Al instalar better-sqlite3 en chips de la serie M de Mac (arquitectura ARM), si encuentras errores como "mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')", debes asegurarte de que el binario coincida con tu arquitectura. Así es como resolver este problema:
# Check your Node.js architecture
node -p "process.arch"
# If it shows 'arm64', but you're still having issues, try:
npm rebuild better-sqlite3 --build-from-source
# Or for a clean install:
npm uninstall better-sqlite3
export npm_config_arch=arm64
export npm_config_target_arch=arm64
npm install better-sqlite3 --build-from-source
Si estás usando Rosetta, asegúrate de que todo tu entorno sea consistente. Tu error muestra binarios x86_64 compilados pero tu sistema necesita arm64. Para una configuración persistente, agrega a tu .zshrc o .bashrc:
export npm_config_arch=arm64
export npm_config_target_arch=arm64
Probando embeddings de Ollama
curl http://localhost:11434/api/embed -d '{"model":"unclemusclez/jina-embeddings-v2-base-code","input":"Llamas are members of the camelid family"}' curl http://127.0.01:11434/api/embed -d '{"model":"unclemusclez/jina-embeddings-v2-base-code","input":"Llamas are members of the camelid family"}' curl http://[::1]:11434/api/embed -d '{"model":"unclemusclez/jina-embeddings-v2-base-code","input":"Llamas are members of the camelid family"}'
Licencia
MIT