Skip to content

Solvro/ml-mcp

Repository files navigation

SOLVRO MCP Logo

SOLVRO MCP

Knowledge Graph RAG System for ToPWR
Intelligent assistant for Wrocław University of Science and Technology

Quick StartArchitectureFeaturesAPI


┌─────────────┐     ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  Frontend   │────▶│  ToPWR API  │────▶│  MCP Server │────▶│    Neo4j    │
│    :80      │     │    :8000    │     │    :8005    │     │    :7687    │
└─────────────┘     └─────────────┘     └─────────────┘     └─────────────┘
React + Nginx         FastAPI              FastMCP          Knowledge Graph
  • PWrChat UI - React chatbot (session sidebar, dark/light mode toggle, persistent theme)
  • Intelligent Query Routing - Guardrails system determines query relevance
  • Natural Language to Cypher - Converts questions to graph queries
  • Knowledge Graph RAG - Retrieval-Augmented Generation with Neo4j
  • MCP Protocol - Standard Model Context Protocol interface
  • Observability - Optional Langfuse tracing integration
  • Docker Ready - One command deployment

Quick Start

# Setup
just setup
cp .env.example .env  # Edit with your API keys

# Run with Docker
just up      # Start Neo4j + MCP Server + API
just logs    # View logs
just down    # Stop services

Architecture

System Overview

┌─────────────┐     ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  Frontend   │────▶│  ToPWR API  │────▶│  MCP Server │────▶│    Neo4j    │
│    :80      │     │    :8000    │     │    :8005    │     │    :7687    │
└─────────────┘     └─────────────┘     └─────────────┘     └─────────────┘
React + Nginx         FastAPI              FastMCP          Knowledge Graph
Service Port Description
frontend 80 PWrChat — React chatbot UI served by Nginx
topwr-api 8000 FastAPI backend for ToPWR app
mcp-server 8005 MCP server with RAG pipeline
neo4j 7474/7687 Knowledge graph database

RAG Pipeline

The heart of the system is a LangGraph-based RAG pipeline that intelligently processes user queries:

Knowledge Graph Pipeline

Pipeline Flow:

  1. Guardrails - Fast LLM determines if query is relevant to knowledge base
  2. Cypher Generation - Accurate LLM converts natural language to Cypher query
  3. Retrieval - Execute query against Neo4j knowledge graph
  4. Response - Return structured context data

Data Pipeline

Separate ETL pipeline for ingesting documents into the knowledge graph:

Data Pipeline

Pipeline Steps:

  1. Document Loading - PDF and text document ingestion
  2. Text Extraction - OCR and content extraction
  3. LLM Processing - Generate Cypher queries from content
  4. Graph Population - Execute queries to build knowledge graph

Configuration

Copy .env.example to .env and configure:

########################################
# LLM / AI Provider Keys
########################################

# OpenAI API key (optional)
OPENAI_API_KEY=

# DeepSeek API key (optional)
DEEPSEEK_API_KEY=

# Google Generative AI / PaLM API key (optional)
GOOGLE_API_KEY=

# CLARIN LLM API key (optional, used by API & client)
CLARIN_API_KEY=


########################################
# Langfuse Observability
########################################

LANGFUSE_SECRET_KEY=
LANGFUSE_PUBLIC_KEY=
LANGFUSE_HOST=https://cloud.langfuse.com


########################################
# Neo4j Database
########################################

# URI used by data pipeline, MCP server and graph config
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=


########################################
# MCP Server Networking
########################################

# Bind host for the MCP server process
MCP_BIND_HOST=0.0.0.0

# Host/port used by API and MCP client to reach the MCP server
MCP_HOST=127.0.0.1
MCP_PORT=8005

Commands

# Docker Stack
just up          # Start all services (including frontend at :80)
just down        # Stop services
just logs        # View logs
just ps          # Service status
just nuke        # Remove everything

# Local Development
just mcp-server  # Run MCP server
just api         # Run FastAPI
just kg "query"  # Query knowledge graph

# Frontend
just frontend-install  # Install npm dependencies
just frontend-dev      # Start dev server at :3000 (requires running API)
just frontend-build    # Build for production

# Quality
just lint        # Format & lint
just test        # Run tests
just ci          # Full CI pipeline

# Data Pipeline
just prefect-up  # Start Prefect
just pipeline    # Run ETL

Project Structure

src/
├── mcp_server/      # MCP server + RAG pipeline
├── mcp_client/      # CLI client
├── topwr_api/       # FastAPI backend
├── config/          # Configuration
└── data_pipeline/   # Prefect ETL flows

frontend/
├── src/
│   ├── api/         # API client
│   ├── hooks/       # useUserId, useSessions, useChat, useTheme
│   ├── components/  # Sidebar, Chat, shared UI
│   └── types/       # TypeScript mirrors of backend models
└── package.json     # React + Vite + TailwindCSS

docker/
├── compose.stack.yml    # Main stack (Neo4j + MCP + API + Frontend)
├── compose.prefect.yml  # Data pipeline
├── Dockerfile.mcp       # MCP server image
├── Dockerfile.api       # FastAPI image
├── Dockerfile.frontend  # React + Nginx image
└── nginx.conf           # SPA fallback + API proxy

API Usage

Chat Endpoint

curl -X POST http://localhost:8000/api/chat \
  -H "Content-Type: application/json" \
  -d '{"user_id": "user1", "message": "Czym jest nagroda dziekana?"}'

Response:

{
  "session_id": "abc123",
  "message": "Nagroda dziekana to wyróżnienie przyznawane...",
  "metadata": {
    "source": "mcp_knowledge_graph",
    "trace_id": "xyz789"
  }
}

Session Management

# Get session history
curl http://localhost:8000/api/sessions/{session_id}/history

# List user sessions  
curl http://localhost:8000/api/users/{user_id}/sessions

Tech Stack

Technology Purpose
React 18 + TypeScript Frontend chat UI
Vite + TailwindCSS v3 Build tooling & styling
Nginx Frontend serving + API proxy
FastMCP Model Context Protocol server
LangGraph RAG state machine
LangChain LLM orchestration
Neo4j Knowledge graph database
FastAPI REST API backend
Langfuse Observability (optional)
Prefect Data pipeline orchestration
Docker Containerization

License

MIT © Solvro

About

Solvro internal MCP server

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors