commit f3771534fc955e05c64d51b358da5ff3b71a6a03 Author: Jacquin Antoine Date: Sat Feb 21 18:03:42 2026 +0100 init diff --git a/chroma-mcp-sse/Dockerfile b/chroma-mcp-sse/Dockerfile new file mode 100644 index 0000000..59ff5e6 --- /dev/null +++ b/chroma-mcp-sse/Dockerfile @@ -0,0 +1,13 @@ +FROM python:3.11-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +# On expose le port 8080 pour correspondre à la config de main.py +EXPOSE 8080 + +CMD ["python", "main.py"] diff --git a/chroma-mcp-sse/main.py b/chroma-mcp-sse/main.py new file mode 100644 index 0000000..ef7de3d --- /dev/null +++ b/chroma-mcp-sse/main.py @@ -0,0 +1,22 @@ +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 query_chroma(collection_name: str, query_text: str, n_results: int = 5): + """Interroge une collection ChromaDB pour trouver des documents similaires.""" + collection = client.get_collection(name=collection_name) + results = collection.query(query_texts=[query_text], n_results=n_results) + return str(results) + +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") diff --git a/chroma-mcp-sse/requirements.txt b/chroma-mcp-sse/requirements.txt new file mode 100644 index 0000000..ab8e0a3 --- /dev/null +++ b/chroma-mcp-sse/requirements.txt @@ -0,0 +1,3 @@ +mcp[server] +uvicorn +chromadb diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d26367f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,19 @@ +services: + chroma-db: + image: chromadb/chroma:latest + container_name: chroma-db + environment: + - IS_PERSISTENT=TRUE + - PERSIST_DIRECTORY=/chroma-data + volumes: + - ./chroma_data:/chroma-data + ports: + - "8000:8000" + + chroma-mcp: + build: ./chroma-mcp-sse + container_name: chroma-mcp + depends_on: + - chroma-db + ports: + - "8080:8080"