Files
linear-coding-agent/generations/library_rag/examples/test_mcp_client.py
David Blanc Brioir d2f7165120 Add Library RAG project and cleanup root directory
- Add complete Library RAG application (Flask + MCP server)
  - PDF processing pipeline with OCR and LLM extraction
  - Weaviate vector database integration (BGE-M3 embeddings)
  - Flask web interface with search and document management
  - MCP server for Claude Desktop integration
  - Comprehensive test suite (134 tests)

- Clean up root directory
  - Remove obsolete documentation files
  - Remove backup and temporary files
  - Update autonomous agent configuration

- Update prompts
  - Enhance initializer bis prompt with better instructions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 11:57:12 +01:00

193 lines
4.9 KiB
Python

#!/usr/bin/env python3
"""
Test simple du client MCP (sans LLM).
Teste la communication directe avec le MCP server.
Usage:
python test_mcp_client.py
"""
import asyncio
import json
import os
import sys
from pathlib import Path
# Ajouter le parent au path pour import
sys.path.insert(0, str(Path(__file__).parent))
from mcp_client_reference import MCPClient
async def test_basic_communication():
"""Test: Communication basique avec le server."""
print("TEST 1: Basic Communication")
print("-" * 80)
library_rag_path = Path(__file__).parent.parent
server_path = library_rag_path / "mcp_server.py"
client = MCPClient(
server_path=str(server_path),
env={"MISTRAL_API_KEY": os.getenv("MISTRAL_API_KEY", "")},
)
try:
await client.start()
print("[OK] Server started\n")
# Liste des outils
tools = await client.list_tools()
print(f"[OK] Found {len(tools)} tools:")
for tool in tools:
print(f" - {tool.name}: {tool.description}")
print("\n[OK] Test passed")
finally:
await client.stop()
async def test_search_chunks():
"""Test: Recherche sémantique."""
print("\n\nTEST 2: Search Chunks")
print("-" * 80)
library_rag_path = Path(__file__).parent.parent
server_path = library_rag_path / "mcp_server.py"
client = MCPClient(
server_path=str(server_path),
env={"MISTRAL_API_KEY": os.getenv("MISTRAL_API_KEY", "")},
)
try:
await client.start()
# Recherche
result = await client.call_tool(
"search_chunks",
{
"query": "nominalism and realism",
"limit": 3,
"author_filter": "Charles Sanders Peirce",
},
)
print(f"[OK] Query: nominalism and realism")
print(f"[OK] Found {result['total_count']} results")
for i, chunk in enumerate(result["results"][:3], 1):
print(f"\n [{i}] Similarity: {chunk['similarity']:.3f}")
print(f" Section: {chunk['section_path']}")
print(f" Preview: {chunk['text'][:150]}...")
print("\n[OK] Test passed")
finally:
await client.stop()
async def test_list_documents():
"""Test: Liste des documents."""
print("\n\nTEST 3: List Documents")
print("-" * 80)
library_rag_path = Path(__file__).parent.parent
server_path = library_rag_path / "mcp_server.py"
client = MCPClient(
server_path=str(server_path),
env={"MISTRAL_API_KEY": os.getenv("MISTRAL_API_KEY", "")},
)
try:
await client.start()
result = await client.call_tool("list_documents", {"limit": 10})
print(f"[OK] Total documents: {result['total_count']}")
for doc in result["documents"][:5]:
print(f"\n - {doc['source_id']}")
print(f" Author: {doc['author']}")
print(f" Chunks: {doc['chunks_count']}")
print("\n[OK] Test passed")
finally:
await client.stop()
async def test_get_document():
"""Test: Récupérer un document spécifique."""
print("\n\nTEST 4: Get Document")
print("-" * 80)
library_rag_path = Path(__file__).parent.parent
server_path = library_rag_path / "mcp_server.py"
client = MCPClient(
server_path=str(server_path),
env={"MISTRAL_API_KEY": os.getenv("MISTRAL_API_KEY", "")},
)
try:
await client.start()
# D'abord lister pour trouver un document
list_result = await client.call_tool("list_documents", {"limit": 1})
if list_result["documents"]:
doc_id = list_result["documents"][0]["source_id"]
# Récupérer le document
result = await client.call_tool(
"get_document",
{"source_id": doc_id, "include_chunks": True, "chunk_limit": 5},
)
print(f"[OK] Document: {result['source_id']}")
print(f" Author: {result['author']}")
print(f" Pages: {result['pages']}")
print(f" Chunks: {result['chunks_count']}")
if result.get("chunks"):
print(f"\n First chunk preview:")
print(f" {result['chunks'][0]['text'][:200]}...")
print("\n[OK] Test passed")
else:
print("[WARN] No documents in database")
finally:
await client.stop()
async def main():
"""Exécuter tous les tests."""
print("=" * 80)
print("MCP CLIENT TESTS")
print("=" * 80)
try:
await test_basic_communication()
await test_search_chunks()
await test_list_documents()
await test_get_document()
print("\n" + "=" * 80)
print("ALL TESTS PASSED [OK]")
print("=" * 80)
except Exception as e:
print(f"\n[ERROR] Test failed: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
asyncio.run(main())