Skip to content

bulentsoykan/Simulation-AI-Agent

Repository files navigation

Simulation AI Agent

GitHub Author

Simulation AI Agent

A plugin-based discrete event simulation server with MCP (Model Context Protocol) integration, enabling AI assistants to run and analyze simulations.

Features

  • Plugin-based Simulation Engine: Extensible architecture supporting multiple simulation types
  • Built-in Simulations: Queueing, Manufacturing, Inventory, and Logistics
  • MCP Integration: Expose simulations as tools for Claude and other AI assistants
  • JWT Authentication: Secure API access with user/tenant management
  • Multi-tenant Support: Row-level security for data isolation
  • Real-time WebSocket Updates: Stream simulation events as they happen
  • Analytics & Reporting: Aggregate statistics and trend analysis
  • ML Predictions: PyTorch neural networks for outcome prediction
  • Prometheus Metrics: Monitor API performance and simulation runs

Quick Start

Installation

# Clone and install
git clone https://github.com/bulentsoykan/Simulation-AI-Agent.git
cd Simulation-AI-Agent
pip install -r requirements.txt

Running the Servers

# Terminal 1: Start FastAPI server (port 8000)
python server.py

# Terminal 2: Start MCP server (port 8001)
python mcp_server.py

The API will be available at http://localhost:8000 with interactive docs at http://localhost:8000/docs

Simulation Types

Queueing (M/M/c Queue)

Models customer arrivals, waiting, and service with multiple servers.

curl -X POST http://localhost:8000/simulations/queueing/run \
  -H "Content-Type: application/json" \
  -d '{"params": {"n_servers": 3, "arrival_rate": 10, "service_time": 2, "sim_time": 480}}'

Parameters:

  • n_servers: Number of parallel service stations (default: 1)
  • arrival_rate: Customer arrival rate per time unit (default: 5.0)
  • service_time: Average service time per customer (default: 3.0)
  • sim_time: Total simulation time (default: 1440)

Metrics:

  • total_customers, avg_wait_time, avg_system_time, max_wait_time, server_utilization

Manufacturing (Production Line)

Models work flowing through production stations with buffers.

curl -X POST http://localhost:8000/simulations/manufacturing/run \
  -H "Content-Type: application/json" \
  -d '{"params": {"stations": ["Cutting", "Assembly", "QC"], "processing_times": [2.0, 5.0, 1.5], "arrival_rate": 0.3}}'

Parameters:

  • stations: Names of production stations in order
  • processing_times: Processing time at each station
  • buffer_sizes: Buffer capacity before each station
  • arrival_rate: Raw material arrival rate

Metrics:

  • throughput, avg_cycle_time, wip, station_utilization, bottleneck_station

Inventory ((s,S) Policy)

Models inventory with reorder points and lead times.

curl -X POST http://localhost:8000/simulations/inventory/run \
  -H "Content-Type: application/json" \
  -d '{"params": {"reorder_point": 20, "order_up_to": 100, "demand_rate": 5.0, "lead_time": 5.0}}'

Parameters:

  • reorder_point: Inventory level that triggers reorder (s)
  • order_up_to: Target inventory level when ordering (S)
  • demand_rate: Average demand per time unit
  • lead_time: Time between order and delivery

Metrics:

  • total_demand, total_fulfilled, fill_rate, avg_inventory, stockout_count, total_cost

Logistics (Vehicle Routing)

Models capacitated vehicle routing for deliveries.

curl -X POST http://localhost:8000/simulations/logistics/run \
  -H "Content-Type: application/json" \
  -d '{"params": {"num_vehicles": 3, "vehicle_capacity": 100, "num_customers": 20}}'

Parameters:

  • num_vehicles: Number of delivery vehicles
  • vehicle_capacity: Capacity per vehicle
  • num_customers: Number of customer locations
  • service_time: Time to serve each customer

Metrics:

  • customers_served, customers_unserved, total_distance, vehicle_utilization, demand_fulfilled

API Endpoints

Simulations

Endpoint Method Description
/simulations GET List all available simulation types
/simulations/{type}/schema GET Get parameter schema for a simulation
/simulations/{type}/run POST Run a simulation
/simulate POST Run queueing simulation (legacy)

Authentication

Endpoint Method Description
/auth/register POST Register new user
/auth/login POST Login and get tokens
/auth/refresh POST Refresh access token
/auth/me GET Get current user info

Analytics

Endpoint Method Description
/analytics/simulation-summary GET Get simulation run statistics
/analytics/trends GET Get metric trends over time

ML Predictions

Endpoint Method Description
/predict/{sim_type} GET Predict simulation outcomes
/ml/train POST Train prediction model (admin)
/ml/model-info GET Get model information

Health & Monitoring

Endpoint Method Description
/health GET Health check
/health/ready GET Readiness check (DB)
/metrics GET Prometheus metrics

MCP Tools

When connected via MCP, the following tools are available:

  • list_simulations: List all available simulation types
  • run_simulation(simulation_type, params): Run any simulation type
  • simulate(...): Run queueing simulation (convenience wrapper)
  • get_workorder_details(workorder_number): Get workorder tracking info
  • get_workorder_configuration(workorder_number): Get workorder config

Claude Desktop Integration

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "simulation": {
      "command": "npx",
      "args": ["mcp-remote", "http://localhost:8001/mcp"]
    }
  }
}

Adding Custom Simulations

Create a new simulation by extending BaseSimulation:

from simulations.base import BaseSimulation
from simulations.registry import SimulationRegistry

@SimulationRegistry.register
class MySimulation(BaseSimulation):
    name = "my_simulation"
    description = "My custom simulation"

    def get_parameter_schema(self) -> dict:
        return {
            "type": "object",
            "properties": {
                "my_param": {"type": "number", "default": 1.0}
            }
        }

    def get_metrics_schema(self) -> dict:
        return {
            "type": "object",
            "properties": {
                "my_metric": {"type": "number"}
            }
        }

    def run(self, params: dict, callback=None) -> dict:
        validated = self.validate_params(params)
        # Run your simulation logic
        return {"my_metric": 42.0}

Configuration

Environment variables (or .env file):

Variable Default Description
DATABASE_URL sqlite:///./simulation.db Database connection string
JWT_SECRET_KEY (generated) Secret for JWT signing
API_PORT 8000 FastAPI server port
MCP_PORT 8001 MCP server port
DEBUG false Enable debug mode

Project Structure

simulation-ai-agent/
├── server.py              # FastAPI application
├── mcp_server.py          # MCP server
├── config.py              # Configuration settings
├── simulations/           # Simulation plugins
│   ├── base.py            # BaseSimulation class
│   ├── registry.py        # Plugin registry
│   ├── queueing.py        # M/M/c queue
│   ├── manufacturing.py   # Production line
│   ├── inventory.py       # Inventory management
│   └── logistics.py       # Vehicle routing
├── database/              # SQLAlchemy models
│   ├── connection.py      # DB session management
│   └── models.py          # ORM models
├── auth/                  # JWT authentication
│   ├── jwt_handler.py     # Token creation/validation
│   ├── dependencies.py    # FastAPI dependencies
│   └── schemas.py         # Pydantic schemas
├── analytics/             # Reporting
│   ├── aggregations.py    # Query aggregations
│   └── reports.py         # Report generation
├── ml/                    # Machine learning
│   ├── predictor.py       # PyTorch inference
│   └── trainer.py         # Model training
├── websocket/             # Real-time updates
│   └── manager.py         # Connection manager
└── monitoring/            # Prometheus metrics
    └── metrics.py         # Metric collectors

Author

Bulent Soykan

License

MIT

Project Overview

A plugin-based MCP server exposing discrete event simulations to AI assistants. Features:

  • Plugin-based simulation engine (queueing, manufacturing, inventory, logistics)
  • JWT authentication with multi-tenant support
  • Real-time WebSocket updates
  • Analytics and ML-based prediction
  • Prometheus monitoring

Architecture

┌─────────────────┐    WS/HTTP   ┌─────────────────┐
│  MCP Clients    │ ◄──────────► │  mcp_server.py  │
└─────────────────┘    :8001     └────────┬────────┘
                                          │
┌─────────────────┐    WS/HTTP   ┌────────▼────────┐    ┌─────────────────┐
│  Web Clients    │ ◄──────────► │   server.py     │◄──►│  SQLite DB      │
└─────────────────┘    :8000     │   (FastAPI)     │    │  (SQLAlchemy)   │
                                 └────────┬────────┘    └─────────────────┘
                                          │
              ┌───────────────────────────┼───────────────────────────┐
              ▼                           ▼                           ▼
    ┌─────────────────┐         ┌─────────────────┐         ┌─────────────────┐
    │ simulations/    │         │  ml/            │         │  analytics/     │
    │  base.py        │         │  predictor.py   │         │  reports.py     │
    │  registry.py    │         │   (PyTorch)     │         │  aggregations.py│
    │  queueing.py    │         └─────────────────┘         └─────────────────┘
    │  manufacturing.py│
    │  inventory.py   │
    │  logistics.py   │
    └─────────────────┘

Running the Project

# Install dependencies
pip install -r requirements.txt

# Terminal 1: FastAPI server (port 8000)
python server.py

# Terminal 2: MCP server (port 8001)
python mcp_server.py

Key Components

Simulation Plugin System (simulations/)

  • base.py: BaseSimulation abstract class with run(), get_parameter_schema(), get_metrics_schema()
  • registry.py: SimulationRegistry for plugin discovery and instantiation
  • Built-in types: queueing, manufacturing, inventory, logistics

Authentication (auth/)

  • JWT-based with access/refresh tokens
  • Multi-tenant via tenant_id on all models
  • Dependencies: get_current_user, get_current_tenant, require_role()

Database (database/)

  • SQLAlchemy ORM with SQLite (configurable to PostgreSQL)
  • Models: Tenant, User, SimulationRun, Workorder

ML Prediction (ml/)

  • PyTorch neural networks trained on historical simulation data
  • SimulationPredictor for inference, SimulationTrainer for training

API Endpoints

Category Endpoint Description
Simulations GET /simulations List simulation types
GET /simulations/{type}/schema Get parameter schema
POST /simulations/{type}/run Run simulation
Auth POST /auth/register Register user
POST /auth/login Get tokens
GET /auth/me Current user
Health GET /health Health check
GET /metrics Prometheus metrics

MCP Tools

  • list_simulations(): List available simulation types
  • run_simulation(simulation_type, params): Run any simulation
  • simulate(...): Run queueing simulation (legacy)
  • get_workorder_details(workorder_number): Get workorder info
  • get_workorder_configuration(workorder_number): Get workorder config

Adding a New Simulation

from simulations.base import BaseSimulation
from simulations.registry import SimulationRegistry

@SimulationRegistry.register
class MySimulation(BaseSimulation):
    name = "my_simulation"
    description = "Description here"

    def get_parameter_schema(self) -> dict:
        return {"type": "object", "properties": {...}}

    def get_metrics_schema(self) -> dict:
        return {"type": "object", "properties": {...}}

    def run(self, params: dict, callback=None) -> dict:
        validated = self.validate_params(params)
        # Simulation logic here
        return {"metric": value}

Configuration

Settings loaded from environment or .env:

  • DATABASE_URL: Database connection (default: sqlite:///./simulation.db)
  • JWT_SECRET_KEY: JWT signing secret
  • API_PORT / MCP_PORT: Server ports (8000/8001)
  • DEBUG: Enable debug mode

About

A plugin-based discrete event simulation server with MCP integration, enabling AI assistants to run and analyze simulations.

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages