语义代码搜索工具

MCP语义搜索服务器是一个本地运行的代码语义搜索工具,支持自然语言查询、自动文档生成和代码依赖分析,适用于开发者在大型代码库中快速定位和理解代码。

  • by NicolasVautrin
  • 本地部署
  • 更新于
在 GitHub 查看 NicolasVautrin/mcp-semantic-search

使用说明

MCP Semantic Search

Serveur MCP pour la recherche sémantique dans le code avec RAG (Retrieval-Augmented Generation).

Vue d'ensemble

mcp-semantic-search est un serveur MCP qui permet d'indexer et de rechercher sémantiquement dans une codebase en utilisant des embeddings spécialisés et une approche RAG. Il combine l'analyse statique du code (call graph) avec des embeddings de machine learning pour offrir une recherche intelligente et contextuelle.

Fonctionnalités

  • 🔍 Recherche sémantique : Recherche en langage naturel dans le code
  • 📚 Documentation automatique : Génération de documentation enrichie pour les symbols
  • 🧠 Multi-embeddings : Utilise des modèles différents pour le code et la documentation
  • 📊 Analyse de call graph : Impact analysis et navigation dans les dépendances
  • ⚡ 100% local et gratuit : Pas de coûts API, tout tourne en local
  • 🎯 Chunking intelligent : Séparation optimale code/doc/relations

Architecture

Composants Principaux

┌─────────────────┐
│  SQLite DB      │  Symbols + Call Graph
│  .callgraph.db  │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  Indexer        │  Génération doc + embeddings
│  - Extracteur   │
│  - Doc Gen      │
│  - Priority     │
└────────┬────────┘
         │
         ├──────────────┬──────────────┐
         ▼              ▼              ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ ChromaDB     │ │ ChromaDB     │ │ ChromaDB     │
│ Documentation│ │ Code Source  │ │ Relations    │
└──────────────┘ └──────────────┘ └──────────────┘
         │              │              │
         └──────────────┴──────────────┘
                        ▼
                 ┌──────────────┐
                 │  MCP Server  │
                 │  8 Tools     │
                 └──────────────┘

Modèles d'Embeddings

  • Documentation : all-mpnet-base-v2 (768 dim, gratuit)
  • Code : microsoft/graphcodebert-base (768 dim, gratuit)
  • Relations : Custom graph embeddings (256 dim)

Installation

cd C:\Users\nicolasv\MCP_servers\mcp-semantic-search

# Créer environnement virtuel
python -m venv venv
venv\Scripts\activate

# Installer dépendances
pip install -r requirements.txt

Configuration

Créer un fichier config.yaml :

database:
  callgraph_db: "C:/path/to/.callgraph.db"
  chroma_db_path: "./.chroma_db"

indexing:
  modules_filter:
    - "open-auction-base"
    - "vpauto"

  priority:
    min_callers: 2
    include_controllers: true
    include_services: true

  documentation:
    use_claude_api: false  # true pour qualité max
    batch_size: 50

embeddings:
  code_model: "microsoft/graphcodebert-base"
  doc_model: "all-mpnet-base-v2"
  device: "cpu"  # ou "cuda" si GPU disponible

search:
  default_results: 10
  enable_reranking: true

Utilisation

1. Indexation

# Indexer la codebase
python scripts/index_codebase.py

# Avec filtre sur modules
python scripts/index_codebase.py --modules "open-auction-base,vpauto"

# Mode verbose
python scripts/index_codebase.py -v

2. Lancer le serveur MCP

python -m mcp_semantic_search.server

3. Configuration dans Claude Code

Ajouter dans claude_desktop_config.json :

{
  "mcpServers": {
    "semantic-search": {
      "command": "python",
      "args": [
        "-m",
        "mcp_semantic_search.server"
      ],
      "cwd": "C:/Users/nicolasv/MCP_servers/mcp-semantic-search",
      "env": {
        "PYTHONPATH": "C:/Users/nicolasv/MCP_servers/mcp-semantic-search/src"
      }
    }
  }
}

Tools MCP

semantic_search__search_code

Recherche de code par similarité sémantique.

Paramètres :

  • query (string) : Requête en langage naturel ou code
  • n_results (int) : Nombre de résultats (défaut: 10)
  • filters (object) : Filtres optionnels (package, type, etc.)

Exemple :

{
  "query": "method that cancels invoice and releases lots",
  "n_results": 5,
  "filters": {"package": "open-auction-base"}
}

semantic_search__search_documentation

Recherche dans la documentation des symbols.

Paramètres :

  • query (string) : Question ou concept métier
  • n_results (int) : Nombre de résultats
  • chunk_type (string) : Type de chunk (summary, business_logic, technical_impl)

semantic_search__get_symbol

Récupère le contexte complet d'un symbol.

Paramètres :

  • symbol_id_or_fqn (string) : ID ou nom complet du symbol
  • include_code (bool) : Inclure le code source
  • include_relations (bool) : Inclure call graph

semantic_search__find_similar

Trouve du code similaire à un snippet donné.

Paramètres :

  • code_snippet (string) : Code à comparer
  • n_results (int) : Nombre de résultats
  • language (string) : Langage (java, python, etc.)

semantic_search__list_callers

Liste les appelants d'un symbol.

Paramètres :

  • symbol_id_or_fqn (string) : Symbol à analyser
  • recursive (bool) : Recherche récursive

semantic_search__list_callees

Liste ce qu'appelle un symbol.

Paramètres :

  • symbol_id_or_fqn (string) : Symbol à analyser
  • recursive (bool) : Recherche récursive

semantic_search__analyze_impact

Analyse l'impact de modifier un symbol.

Paramètres :

  • symbol_id_or_fqn (string) : Symbol à modifier
  • depth (int) : Profondeur d'analyse

semantic_search__index_status

Statistiques sur l'index.

Retourne :

  • Nombre de symbols indexés
  • Taille des collections
  • Date dernière indexation

Documentation Détaillée

Voir le dossier docs/ pour la documentation complète :

Performances

Coûts

Composant Solution Coût
Embeddings code GraphCodeBERT (local) 0€
Embeddings doc all-mpnet-base-v2 (local) 0€
Base vectorielle ChromaDB (local) 0€
Documentation (optionnel) Claude API ou local 0-15€
TOTAL 0-15€

Temps d'indexation

  • 10K symbols custom : ~2-3 heures (avec génération doc Claude)
  • 10K symbols custom : ~10 minutes (doc basique)
  • Recherche : <100ms par requête

Espace disque

  • Modèles : ~1 GB (téléchargement unique)
  • Index ChromaDB : ~200-300 MB pour 10K symbols
  • Base SQLite : Déjà existante

Roadmap

  • [ ] Phase 1 : Infrastructure de base
  • [ ] Phase 2 : Indexation avec doc basique
  • [ ] Phase 3 : Intégration Claude pour doc enrichie
  • [ ] Phase 4 : Interface web de recherche
  • [ ] Phase 5 : Support multi-langages

Licence

MIT

Auteur

Développé pour le projet Bricklead Enchères (Axelor)