from mcp.server.fastmcp import FastMCP import chromadb import os # On définit l'hôte sur 0.0.0.0 et le port sur 8080 pour le container Docker mcp = FastMCP("Chroma-Server", host="0.0.0.0", port=8080) # Initialisation du client ChromaDB CHROMA_URL = os.getenv("CHROMA_URL", "http://chroma-db:8000") client = chromadb.HttpClient(host="chroma-db", port=8000) @mcp.tool() async def find_incident_solution(query_error: str, service: str = None): """ Recherche des incidents passés similaires et retourne les solutions appliquées. L'utilisateur peut décrire l'erreur (ex: 'serveur lent') ou donner un code d'erreur. """ collection = client.get_collection(name="incident_history") # On cherche les 2 incidents les plus proches pour ne pas saturer le LLM results = collection.query( query_texts=[query_error], n_results=2, where={"service": service} if service else None ) if not results["documents"][0]: return "Aucun incident similaire répertorié dans la base de connaissances." response = "Voici les incidents similaires trouvés :\n" for i, doc in enumerate(results["documents"][0]): meta = results["metadatas"][0][i] response += f"\n--- INCIDENT {meta.get('incident_id', 'Inconnu')} ---" response += f"\nLOGS : {doc}" response += f"\nSOLUTION : {meta.get('solution_applied', 'Non renseignée')}\n" return response if __name__ == "__main__": # On lance le serveur en mode SSE (Server-Sent Events) # C'est ce que LM Studio et la plupart des clients attendent mcp.run(transport="sse")