Code Context MCP Server

Fornece contexto de código de repositórios git locais.

Documentação

Code Context MCP Server

Um servidor Model Context Protocol (MCP) para fornecer contexto de código a partir de repositórios git locais. Este servidor permite que você:

  1. Clone repositórios git localmente
  2. Processe branches e arquivos
  3. Gere embeddings para blocos de código
  4. Realize busca semântica sobre o código

Recursos

  • Usa repositórios git locais em vez da API do GitHub
  • Armazena dados em banco de dados SQLite
  • Divide o código em blocos semânticos
  • Gera embeddings para blocos de código usando Ollama
  • Fornece busca semântica sobre o código

Pré-requisitos

  • Node.js (v16+)
  • Git
  • Ollama com um modelo de embedding

Instalação

# Clone the repository
git clone <repository-url>
cd code-context-mcp

# Install dependencies
npm install

# Build the project
npm run build

Configuração

Defina as seguintes variáveis de ambiente:

  • DATA_DIR: Diretório para o banco de dados SQLite (padrão: '~/.codeContextMcp/data')
  • REPO_CACHE_DIR: Diretório para repositórios clonados (padrão: '~/.codeContextMcp/repos')

Usando Ollama

Para embeddings mais rápidos e poderosos, você pode 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 com Claude Desktop

Adicione a seguinte configuração ao seu arquivo de configuração do Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "code-context-mcp": {
      "command": "/path/to/your/node",
      "args": ["/path/to/code-context-mcp/dist/index.js"]
    }
  }
}

Ferramentas

O servidor fornece a seguinte ferramenta:

queryRepo

Clona um repositório, processa o código e realiza busca 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
}

O parâmetro branch é opcional. Se não for fornecido, a ferramenta usará automaticamente o branch padrão do repositório.

O parâmetro keywords é opcional. Se fornecido, os resultados serão filtrados para incluir apenas blocos que contenham pelo menos uma das palavras-chave especificadas (correspondência sem diferenciar maiúsculas de minúsculas).

Os parâmetros filePatterns e excludePatterns são opcionais. Eles permitem filtrar quais arquivos são processados e pesquisados usando padrões glob (por exemplo, **/*.ts para todos os arquivos TypeScript).

Esquema do Banco de Dados

O servidor usa SQLite com o seguinte esquema:

  • repository: Armazena informações sobre repositórios
  • branch: Armazena informações sobre branches
  • file: Armazena informações sobre arquivos
  • branch_file_association: Associa arquivos a branches
  • file_chunk: Armazena blocos de código e seus embeddings

Depuração

Problemas de Arquitetura ARM - Série MAC Mx

Ao instalar better-sqlite3 em chips da série M da Mac (arquitetura ARM), se você encontrar erros como "mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')", você precisa garantir que o binário corresponda à sua arquitetura. Veja como resolver esse 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

Se você estiver usando Rosetta, certifique-se de que todo o seu ambiente seja consistente. Seu erro mostra binários x86_64 sendo compilados, mas seu sistema precisa de arm64. Para configuração persistente, adicione ao seu .zshrc ou .bashrc:

export npm_config_arch=arm64
export npm_config_target_arch=arm64

Testando Embeddings do 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"}'

Licença

MIT