GlossaryAI MCP Server

GlossaryAI MCP Server

MCP server for GlossaryAI, an AI assistant specialized in legal and regulatory vocabularies. Provides tools for vector search, planning, legal link resolution, and concept comparison using Qdrant and an OpenAI-compatible LLM.

Category
访问服务器

README

GlossaryAI — Serveur MCP

Serveur MCP (Model Context Protocol) pour GlossaryAI, un assistant IA spécialisé en vocabulaires, glossaires et textes juridiques/réglementaires. Il expose des outils de recherche vectorielle, de planification, de résolution de liens juridiques et de comparaison de concepts, alimentés par une base Qdrant et un LLM OpenAI-compatible.


Overview

Le serveur est construit avec FastMCP et exécuté via Uvicorn. Il est appelé par le client Streamlit AI4Semantics-MCP-client-fr pour :

  1. Planifier la réponse à une question utilisateur (plan_workflow_with_tools).
  2. Rechercher dans les documents indexés (retrieve_documents).
  3. Lister les sources disponibles (get_available_tags).
  4. Résoudre les liens juridiques et RDF mentionnés dans les chunks (resolve_links).
  5. Comparer/converger plusieurs termes (compare_concepts).

Requirements

  • Python 3.10 ou supérieur
  • Docker (pour Qdrant via docker-compose.yml)
  • Un GPU est recommandé pour le reranker local ; sinon le serveur bascule automatiquement sur ONNX CPU.
  • Une clé API pour le LLM (LLM_API_KEY / URL_LLM_API) et éventuellement pour Albert (ALBERT_API_KEY) si le reranker API est activé.

Setup

1. Cloner le dépôt

git clone https://github.com/pwc-be-adv-tc-cd/AI4semantics
cd AI4semantics/AI4Semantics-MCP-server-fr

2. Créer et activer un environnement virtuel

python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

3. Installer les dépendances

pip install -r requirements.txt

4. Configurer les variables d'environnement

Copier .env.sample vers .env et renseigner les valeurs :

cp .env.sample .env
Variable Description
SERVER_HOST Hôte Qdrant (qdrant en Docker, localhost en local)
SERVER_PORT Port Qdrant (6333)
QDRANT_API_KEY Clé API Qdrant (laisser vide si aucune)
URL_LLM_API Endpoint OpenAI-compatible du LLM
LLM_API_KEY Clé API du LLM
LLM_MODEL Nom du modèle LLM
ALBERT_API_KEY Clé pour le reranker Albert (si reranker_api.enabled: true)

5. Démarrer Qdrant

docker-compose up -d

Qdrant est alors accessible sur localhost:6333 avec un volume persistant dans ./data/qdrant.

6. Indexer les documents

Placer les documents dans tools/index_search/load_documents/documents/ puis lancer :

python tools/index_search/load_documents/load.py

Le script supporte de nombreux formats : PDF, HTML, TXT, CSV, JSON, XML/RDF/SKOS, Excel, Markdown, RTF, etc. Les fichiers HTML Eur-Lex (par exemple Data-Act.html) sont automatiquement découpés par articles/chapitres.

Pour tester la recherche :

python tools/index_search/load_documents/retrieve.py

7. Démarrer le serveur MCP

python -m server

Le serveur écoute par défaut sur 0.0.0.0:8001.


Tools

Tool Fichier Description
plan_workflow_with_tools tools/planning_orchestrator/plan_workflow_with_tools.py Planifie l'enchaînement des outils pour répondre à la question utilisateur.
retrieve_documents tools/index_search/retrieve_documents.py Recherche hybride dense/sparse dans Qdrant, reranking, retour de chunks et de fenêtres de documents.
get_available_tags tools/index_search/get_available_tags.py Liste les tags de sources présents dans la collection Qdrant.
resolve_links tools/legal_link_resolver/resolve_links.py Détecte les références à articles juridiques et les liens RDF/SKOS, puis remonte les chunks liés.
compare_concepts tools/concept_comparator/compare_concepts.py Compare plusieurs termes via recherche vectorielle et propose une définition convergente via LLM.

File Structure

.
├── server.py                       # Point d'entrée FastMCP + Uvicorn
├── config.py                       # Chargement centralisé de la configuration
├── config.yaml                     # Paramètres de chunking, recherche, reranker, comparateur
├── docker-compose.yml              # Service Qdrant
├── .env.sample                     # Variables d'environnement requises
├── requirements.txt                # Dépendances Python
│
└── tools/
    ├── __init__.py                 # Export des outils enregistrés dans le serveur
    │
    ├── concept_comparator/
    │   └── compare_concepts.py     # Comparaison/convergence de termes
    │
    ├── index_search/
    │   ├── retrieve_documents.py           # Wrapper de recherche pour le serveur
    │   ├── retrieve_search_documents.py    # Logique de recherche hybride et aggregation
    │   ├── get_available_tags.py           # Liste des tags indexés
    │   ├── init_qdrant_no_vocs.py          # (legacy) initialisation sans vocabulaires
    │   ├── init_qdrant_vocs.py             # (legacy) initialisation avec vocabulaires
    │   ├── old_init.py                     # (legacy)
    │   └── load_documents/
    │       ├── load.py             # Indexation complète (parse, chunk, embed, upsert)
    │       ├── retrieve.py         # Script de test de recherche
    │       ├── config.py           # Client Qdrant, modèle d'embedding, rerankers
    │       ├── config.yaml         # Configuration de Qdrant, chunking, reranker
    │       └── documents/          # Dossier contenant les documents à indexer
    │           ├── AGIT/
    │           ├── EU/
    │           ├── FranceTerme/
    │           ├── Legifrance/
    │           ├── OFB/
    │           └── OiEau/
    │
    ├── legal_link_resolver/
    │   └── resolve_links.py        # Résolution de liens juridiques et RDF
    │
    └── planning_orchestrator/
        ├── plan_workflow_with_tools.py  # Planner agent
        └── prompts.py                   # Prompt système du planner

Architecture de recherche

  1. Parsing : load.py extrait le texte de nombreux formats.
  2. Chunking : découpage par taille avec chevauchement. Les HTML Eur-Lex sont chunkés par articles/chapitres.
  3. Embeddings : modèle BAAI/bge-m3 (dense + sparse via la même API de modèle).
  4. Indexation : upsert dans Qdrant avec métadonnées (tag, filename, chunk_index, article, concept_uri, etc.).
  5. Recherche : recherche hybride dense/sparse, reranking local (bge-reranker-v2-m3) ou via API Albert, agrégation par document, retour des meilleurs chunks avec possibilité de fenêtre.

Les paramètres de recherche sont centralisés dans tools/index_search/load_documents/config.yaml :

Paramètre Description
search.limit Nombre de résultats finaux retournés
search.min_candidates Taille du pool initial de candidats
search.rerank_pool_size Nombre de candidats rerankés
search.hybrid_dense_weight Poids de la recherche dense vs sparse
search.max_chunks_per_document Nombre de chunks maximum par document dans les résultats
chunking.chunk_size Taille d'un chunk
chunking.chunk_overlap Chevauchement entre chunks

Configuration

  • config.yaml (racine) : paramètres pour le résolveur de liens (link_resolver) et le comparateur de concepts (concept_comparator).
  • tools/index_search/load_documents/config.yaml : configuration Qdrant, modèles, chunking, reranker, recherche.
  • .env : secrets et endpoints.

Démarrage rapide

# 1. Démarrer Qdrant
docker-compose up -d

# 2. Indexer les documents
python tools/index_search/load_documents/load.py

# 3. Lancer le serveur MCP
python -m server

Puis lancer le client Streamlit AI4Semantics-MCP-client-fr.


Notes importantes

  • Le serveur utilise un ThreadPoolExecutor(max_workers=2) pour exécuter les recherches lourdes sans bloquer la boucle asyncio.
  • TOKENIZERS_PARALLELISM est désactivé pour éviter les deadlocks du tokenizer HuggingFace.
  • Le reranker local peut être remplacé par l'API Albert si reranker_api.enabled est à true dans config.yaml.

Pour plus de détails, consulter les commentaires dans chaque module.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选