CLARA — MCP Server (backend)
Backend pentru CLARA, sistem hibrid de diagnosticare radiologică pulmonară. Expune un model ViT-B/16 fine-tuned pe CheXpert (14 patologii), explicabilitate LRP-ViT, segmentare promptabilă LRP-to-SAM2, RAG clinic, generare de raport și 4 agent skills MCP, totul cu securitate agentică în 4 straturi.
⚠️ Instrument de augmentare, nu de înlocuire a radiologului. Output asistat de AI, de validat de medic.
Stack
| Componentă | Tehnologie | |---|---| | API + MCP | FastAPI + fastmcp (REST și MCP coexistente) | | Pipeline asincron | Celery + Redis (progres prin SSE) | | Bază de date | PostgreSQL + pgvector (audit log + index RAG) | | CV | PyTorch 2.3 + transformers + peft | | Orchestrare | Docker Compose | | Frontend | Next.js (separat: ../clara-radiology-dashboard) |
Structura proiectului
clara-mcp-server/
├── app/
│ ├── main.py # FastAPI: montează REST + MCP
│ ├── config.py # setări (pydantic-settings)
│ ├── api/ # POST /analyze, GET /stream/{job_id}, scheme
│ ├── cv_engine/ # model, preprocess, LRP-ViT, LRP-to-SAM2, inference
│ ├── rag/ # embedder, knowledge base, retriever, TAM
│ ├── mcp/ # server fastmcp + cele 4 skills
│ ├── security/ # sanitize, prompt guard, guardrails, audit log
│ ├── tasks/ # Celery app + pipeline asincron
│ ├── db/ # SQLAlchemy engine + modele ORM
│ └── llm/ # generare raport radiologic
├── weights/ # vit_lora_chexpert.pt (montat ca volum)
├── scripts/init_db.sql # pgvector + tabele
├── demo/ # imagine demo pentru apărare
├── tests/test_e2e.py
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
Pornire rapidă (docker compose up)
cp .env.example .env # completează OPENAI_API_KEY (opțional)
# pune modelul în weights/vit_lora_chexpert.pt (deja copiat dacă ai folosit scriptul)
docker compose up --build
Servicii disponibile după pornire:
- API + docs OpenAPI: http://localhost:8000/docs
- Endpoint MCP: http://localhost:8000/mcp
- Postgres:
localhost:5432, Redis:localhost:6379
API REST (rezumat)
| Metodă | Rută | Descriere | |---|---|---| | POST | /analyze | Trimite o radiografie, creează un job asincron | | GET | /stream/{job_id} | Progres în timp real (SSE) + rezultat final | | GET | /health | Status model + dependențe |
Cele 4 agent skills (MCP)
- ExecuteVisionInference — clasificare ViT + LRP + LRP-to-SAM2
- QueryClinicalKnowledge — RAG ierarhic pe baza de cunoștințe clinică
- SynthesizeMedicalReport — raport radiologic via LLM
- EscalateToHumanExpert — decizie conservatoare de escalare
Securitate agentică (4 straturi)
- Sanitizare PII la ingestie (Presidio / regex fallback)
- Izolarea contextului în prompt (delimitare XML, context = date, nu comenzi)
- Validarea output-ului (Guardrails / heuristici anti-halucinație și anti-injecție)
- Audit log imutabil cu lanț de hash-uri (Postgres)
Note pentru demonstrația live
- SAM2 are fallback clasic (GrabCut) dacă pachetul Meta nu e instalat.
- BiomedCLIP are fallback la
sentence-transformersdacă nu se încarcă. - Fără
OPENAI_API_KEY, raportul revine la promptul structurat TAM (rulează oricum).
---
Status implementare: Pas 6/7 — backend complet (CV + REST/SSE + Celery + MCP + RAG + securitate) + integrare frontend (api.ts, SSE, /audit/recent, lrp_map_b64 + report în pipeline). Urmează test e2e + screenshot-uri.











