Run every client,
from one console — AI included
An MSP-grade ITSM with strict tenant isolation, branded portals, clone-on-onboard provisioning — and a full AI stack (Agent Assist, RAG, multi-channel chatbot) where every call is scoped to the right client. One operator can serve fifty tenants without ever leaking one client's KB into another's draft reply.
What X-MSP does
Pragmatic features built for real-world teams.
Multi-tenant Architecture
Single DB with strict client isolation; switch tenants without re-logging in.
Per-client SLAs & Catalogs
Each customer gets its own SLAs, priorities and service catalog.
Clone-on-onboard
Spin up a new client with a fully-seeded copy of your template tenant in seconds.
Branded Client Portals
Subdomain + logo + theme per client; end-users see only their own data.
Cross-client Reporting
MSP operators get a roll-up view of tickets, SLAs and load across every tenant.
Role-aware Access
MSP + CLIENT realms with row-level filters baked into every query.
AI that respects tenant boundaries
Every shipped AI surface scopes its RAG search, prompts and outputs to the calling client's data. The MSP operator sees everything; the AI sees only what the current ticket is allowed to see.
Agent Assist · Live
Summarise long incident threads, draft a customer reply in the client's preferred language, suggest resolutions from similar resolved tickets. Each call scoped to the ticket's tenant — no cross-client KB leakage, ever.
Multi-channel chatbot · Live
LangGraph-based chatbot (classify → search → respond → escalate) on Feishu, WeChat, WeCom, YouDu and the web portal. Per-client KB grounding, sentiment-aware auto-escalation, supervisor view for the MSP operator.
Tenant-safe RAG · Live
Vector embeddings on every KB article, scoped by clientId. Semantic search at request time picks the right context for each client; cross-tenant queries are physically impossible at the query layer.
Your client's data never touches a public model unless you choose it
Per-tenant chatbot config: pick OpenAI for one client, Anthropic for another, a local Ollama for the regulated one. Embeddings provider is separately configurable. Air-gap the whole stack with two env vars (LLM_BASE_URL, LLM_API_KEY) pointing at your local llama-cpp or vLLM. No pgvector required — Float[] in Postgres is enough up to ~100k articles per tenant.
