43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
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")
|