camillebrl/vlm_mcp_server
If you are the rightful owner of vlm_mcp_server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
A Model Context Protocol (MCP) server for image analysis using the Vision-Language InternVL3 model, enabling image relevance evaluation and text response generation based on visual content.
VLM MCP Server
Un serveur MCP (Model Context Protocol) pour l'analyse d'images utilisant le modèle Vision-Language InternVL3. Ce serveur permet d'évaluer la pertinence d'images par rapport à des requêtes et de générer des réponses textuelles basées sur le contenu visuel.
Fonctionnalités
- Analyse d'images avec requête : Analyse multiple d'images avec vérification automatique de pertinence
- Vérification de pertinence : Évalue si une image est pertinente pour une requête donnée
- Analyse d'image unique : Analyse détaillée d'une seule image
- Gestion intelligente de la mémoire : Chargement/déchargement automatique du modèle
- Support GPU optimisé : Utilisation efficace de la mémoire GPU avec nettoyage automatique
Architecture
Le serveur utilise une architecture modulaire avec :
- VLMServer : Serveur MCP principal gérant les outils et les requêtes
- VLMSModelManager : Gestionnaire singleton pour le chargement/déchargement du modèle
- VLMSModel : Interface avec le modèle InternVL3 pour l'analyse d'images
- Utilitaires : Scripts de nettoyage GPU et gestion des processus
Configuration client MCP
{
"mcpServers": {
"vlm-server": {
"command": "/path/to/vlm-server/start_vlm_server.sh"
}
}
}
Debugging
Pour afficher les logs du server:
tail -n 1000 /tmp/vlm_mcp_startup.log
Installation
Prérequis
- Python 3.10+
- CUDA (pour l'accélération GPU)
- Poetry pour la gestion des dépendances
Installation des dépendances
# Cloner le repository
git clone <repository-url>
cd vlm-server
# Installer avec Poetry
make install
# ou directement avec Poetry
poetry install
Démarrage du serveur
# Via le script de démarrage
./start_vlm_server.sh
# Ou directement via Poetry
poetry run python -m vlm_server.cli --log-level INFO
Outils disponibles
1. analyze_images_with_query
Analyse multiple d'images avec vérification de pertinence automatique.
Paramètres :
image_paths(array) : Liste des chemins vers les imagesquery(string) : Question ou requête sur les imagescheck_relevance(boolean, optionnel) : Vérifier la pertinence (défaut: true)metadata(array, optionnel) : Métadonnées pour chaque image
Exemple :
{
"image_paths": ["/path/to/image1.jpg", "/path/to/image2.png"],
"query": "Quels sont les éléments techniques visibles dans ces diagrammes ?",
"check_relevance": true
}
2. check_image_relevance
Vérifie si une image est pertinente pour une requête.
Paramètres :
image_path(string) : Chemin vers l'imagequery(string) : Requête pour vérifier la pertinence
Exemple :
{
"image_path": "/path/to/document.jpg",
"query": "Cette image contient-elle des informations sur les ventes ?"
}
3. analyze_single_image
Analyse détaillée d'une seule image.
Paramètres :
image_path(string) : Chemin vers l'imagequery(string) : Question sur l'image
4. get_model_status
Obtient l'état actuel du modèle (chargé/déchargé, mémoire utilisée).
Gestion de la mémoire
Le serveur implémente une gestion intelligente de la mémoire GPU :
Chargement dynamique
- Le modèle n'est chargé qu'au premier usage
- Déchargement automatique quand aucune référence active
- Support de différents modèles InternVL3
Nettoyage automatique
- Garbage collection Python après chaque opération
- Vidage agressif du cache CUDA
- Réinitialisation des statistiques mémoire
Formatage du code
# Formater et vérifier le code
make format
# Nettoyer les fichiers temporaires
make clean
Modèles utilisés
Le serveur utilise par défaut OpenGVLab/InternVL3-1B mais supporte d'autres modèles InternVL3 :
OpenGVLab/InternVL3-1B(recommandé, plus léger)OpenGVLab/InternVL3-2BOpenGVLab/InternVL3-8B
Configuration GPU
- Support multi-GPU avec
device_map="auto" - Quantification 8-bit pour réduire l'usage mémoire
- Flash Attention quand disponible
- Preprocessing dynamique des images: Taille d'image par défaut : 448x448 pixels, maximum 12 patches par image pour le preprocessing
Limites
- Maximum 2 images par requête pour éviter l'épuisement mémoire GPU (à modifier si plus de mémoire gpu disponible)