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:

  1. Clonar repositorios git localmente
  2. Procesar ramas y archivos
  3. Generar embeddings para fragmentos de código
  4. 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 repositorios
  • branch: Almacena información sobre las ramas
  • file: Almacena información sobre los archivos
  • branch_file_association: Asocia archivos con ramas
  • file_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