CyberScripts MDT Documentation
Everything you need to set up and run your MDT system
CyberScripts MDT is a full-featured Mobile Data Terminal and Computer Aided Dispatch (CAD) system for FiveM roleplay servers. It consists of three components:
- Police MDT Script — The in-game FiveM resource (tablet UI, 911 system, dispatch, panic button)
- CyberLib Bridge — Auto-syncs characters, vehicles, weapons, and licenses between your server and the MDT
- Web MDT — The browser-based interface at
yourinstance.cyberscripts.shop
Requirements
- FiveM Server with QBCore, QBox, or ESX framework
- MySQL/MariaDB database (oxmysql recommended)
- ox_inventory (recommended for weapon sync) or qb-inventory
- Active CyberScripts subscription with valid API key
Installation
Step 1: Download Your Script
Go to your Dashboard, find your instance, and click Download. This gives you a ZIP with your API key pre-configured.
Step 2: Install the MDT Resource
Extract cyberscripts-mdt into your server's resources folder.
Step 3: Install CyberLib
Extract cyber-lib into your server's resources folder.
Step 4: Add to server.cfg
# CyberScripts MDT - Load order matters!
ensure cyberscripts-mdt
ensure cyber-lib
Step 5: Restart Your Server
You should see these messages in your console:
[CyberScripts MDT] License verified successfully!
[CyberScripts MDT] Instance: yourinstance
[CyberScripts MDT] MDT URL: https://yourinstance.cyberscripts.shop
[CyberLib] MDT connection established
[CyberLib] Framework: qbcore (loaded)
[CyberLib] Character sync module loaded
[CyberLib] Vehicle sync module loaded
[CyberLib] Weapon sync module loaded
[CyberLib] License sync module loaded
Configuration
MDT Config (config.lua)
Config = {}
Config.Debug = false -- Enable debug prints
Config.OpenKey = 'F5' -- Key to open MDT
Config.AllowedJobs = { -- Jobs that can use the MDT
'police', 'sheriff',
'state', 'dispatch'
}
Config.Calls = {
MaxCalls = 200, -- Max calls to display
AllowedJobs = { 'police', 'sheriff', 'dispatch' }
}
Config.FingerprintScanner = {
Enabled = true,
Locations = { -- Add scanner locations
{ label = "LSPD Mission Row", coords = vector3(441.69, -982.06, 30.69) },
{ label = "Sandy Shores", coords = vector3(1853.28, 3686.73, 34.27) },
}
}
CyberLib Config (config.lua)
CyberLib.Config = {
Debug = false,
Framework = 'auto', -- 'auto', 'qbcore', 'qbox', 'esx'
CharacterSync = {
Enabled = true,
SyncOnLoad = true, -- Sync when player loads character
SyncOnUpdate = true, -- Sync when character info changes
AutoGenerateSSN = true
},
VehicleSync = {
Enabled = true,
SyncOnPurchase = true,
SyncOnTransfer = true,
SyncOnLoad = true -- Sync all owned vehicles on join
},
WeaponSync = {
Enabled = true,
SyncOnAcquire = true, -- Register when picked up/bought
SyncOnRemove = true,
WeaponItems = 'auto' -- Auto-detect WEAPON_ items
},
LicenseSync = {
Enabled = true,
SyncOnLoad = true
}
}
Police MDT Setup
After installation, officers with allowed jobs can open the MDT in-game.
Important: The license.lua file contains your secret API key. Never share it publicly or commit it to a public repository.
Linking Characters
When an officer opens the MDT for the first time, they need to link their in-game character to their web MDT account. Click the Connect button on the tablet and enter the email address used to register on the web MDT.
In-Game Usage
| Action | Default Key / Command | Description |
|---|---|---|
| Open MDT | F5 | Opens the MDT tablet |
| 911 Call | /911 [message] | Send a 911 emergency call |
| Panic Button | MDT button | Sends a 10-999 officer down alert to all units |
| Backup | MDT button | Request backup to your current location |
| Calls Menu | /calls | Quick view of active calls |
Dispatch System
The Cybers-Dispatch resource provides automatic dispatch alerts when in-game events occur:
| Alert | 10-Code | Trigger |
|---|---|---|
| Shots Fired | 10-71 | Player fires a weapon |
| Assault | 10-10 | Player attacks another player |
| Vehicle Theft | 10-35 | Player enters an unlocked NPC vehicle |
| Carjacking | 10-35A | Player steals an occupied vehicle |
| Speeding | 10-94 | Player exceeds speed threshold |
| Hit and Run | 10-57 | Player hits a vehicle/ped and flees |
| Officer Down | 10-999 | Officer is killed/incapacitated |
| Robbery | 10-65 | Triggered by robbery scripts |
| Explosion | 10-80 | Explosion detected near player |
Dispatch includes anti-exploit features: rate limiting, cooldowns, no-call zones (gun ranges, hunting areas), and server-side validation.
Fingerprint Scanner
Place fingerprint scanner locations in config.lua. Officers can interact with the scanner using ox_target or qb-target to scan a nearby player and look up their civilian record in the MDT.
DOJ Portal Setup
The Department of Justice Portal is a separate product that integrates with the Police MDT. It provides warrant management, court cases, sentencing, and more for legal professionals.
The DOJ Portal shares the same database as the Police MDT. When police arrest someone, the DOJ sees it. When a judge issues a warrant, police see the wanted status. They work together but can also be purchased independently.
Installation
- Download your DOJ script from the Dashboard (your
*dmdtinstance) - Extract
cyberscripts-dojinto your server'sresourcesfolder - Add to
server.cfg:
ensure cyberscripts-doj
Configuration
Config.OpenKey = 'F6' -- Key to open DOJ terminal
Config.OpenCommand = 'doj' -- Chat command alternative
Config.AllowedJobs = { -- Jobs that can access DOJ
'judge', 'prosecutor', 'attorney',
'lawyer', 'clerk', 'doj', 'da', 'pd'
}
Config.Terminals = { -- Physical terminal locations
{ label = "Courthouse", coords = vector3(-553.42, -199.60, 38.22) },
}
Roles
| Role | Capabilities |
|---|---|
| Judge | Approve/deny warrants, issue verdicts, set bail, rule on motions, suppress evidence, admin panel |
| Prosecutor | File cases, request warrants, submit evidence, offer plea bargains |
| Defense Attorney | View assigned cases, file motions, submit evidence, respond to pleas |
| Clerk | File cases, schedule hearings, submit evidence, court administration |
Warrant System
The warrant system connects the DOJ and Police MDT:
- Prosecutor requests a warrant from the DOJ Portal
- Judge reviews and approves/denies the warrant
- If approved, the civilian's wanted status updates automatically
- Police officers see the warrant on the civilian's record in the Police MDT
- Officers can view the full legal warrant document with the judge's signature
If a judge requests a warrant, it is auto-approved (no review needed).
Printing Warrants
Players with the DOJ script can print physical warrant documents to their inventory:
/printwarrant [warrant ID]
The warrant ID is shown in the DOJ Portal warrants table (e.g., W-0001) and in the Police MDT warrant viewer. The printed item contains all warrant metadata (type, subject, reason, judge signature, date).
Required: Add the warrant_paper item to your inventory system:
['warrant_paper'] = {
label = 'Court Warrant',
weight = 10,
stack = false,
close = false,
description = 'An official court warrant document',
},
warrant_paper = {
name = 'warrant_paper',
label = 'Court Warrant',
weight = 10,
type = 'item',
image = 'warrant_paper.png',
unique = true,
useable = true,
shouldClose = false,
description = 'An official court warrant document'
},
CyberLib Bridge - Overview
CyberLib is the bridge between your FiveM server and the MDT. It automatically syncs data without any code changes to your existing scripts.
CyberLib is plug-and-play. Just ensure cyber-lib in your server.cfg and it works. No exports needed for standard setups.
Supported Frameworks
| Framework | Status |
|---|---|
| QBCore | Full Support |
| QBox (qbx_core) | Full Support |
| ESX | Full Support |
Supported Inventories
| Inventory | Weapon Tracking |
|---|---|
| ox_inventory | Full Support (auto-register on pickup/purchase) |
| qb-inventory | Full Support |
| qs-inventory | Full Support |
Supported Vehicle Shops
| Resource | Auto-Sync |
|---|---|
| qb-vehicleshop | Yes - registers on purchase |
| qbx_vehicleshop | Yes - registers on purchase |
| Custom shops | Via export (see below) |
CyberLib Installation
- Place
cyber-libin yourresourcesfolder - Add
ensure cyber-libtoserver.cfg(aftercyberscripts-mdt) - Edit
cyber-lib/config.luaif needed (defaults work for most servers) - Restart your server
CyberLib Configuration
All settings are in cyber-lib/config.lua. The defaults work for most QBCore/QBox/ESX servers. Only change what you need.
| Setting | Default | Description |
|---|---|---|
Framework | 'auto' | Auto-detects your framework |
CharacterSync.Enabled | true | Sync characters to MDT |
CharacterSync.AutoGenerateSSN | true | Auto-generate SSN for new characters |
VehicleSync.Enabled | true | Sync vehicles to MDT |
VehicleSync.SyncOnLoad | true | Sync all vehicles when player joins |
WeaponSync.Enabled | true | Track firearms in MDT |
WeaponSync.WeaponItems | 'auto' | Auto-detect weapon items |
LicenseSync.Enabled | true | Sync licenses to MDT |
Character Sync
When a player selects a character (via any multichar system), CyberLib automatically creates or updates their civilian record in the MDT with:
- First name, last name
- Date of birth, sex
- Phone number
- Auto-generated SSN (if enabled)
This works with any multichar resource (mMultichar, qb-multicharacter, qbx_spawn, etc.) since they all trigger the standard framework player-loaded event.
Vehicle Sync
Vehicles are synced to the MDT in two ways:
- On character load — All vehicles in
player_vehicles(QBCore) orowned_vehicles(ESX) are registered - On purchase — When a player buys from a dealership, the vehicle is instantly registered
Vehicle records include: plate, make, model, color, and owner information.
Weapon Sync
CyberLib hooks into your inventory system. When a player acquires a firearm, it's automatically registered in the MDT with:
- Serial number (from item metadata)
- Make, model, caliber (mapped from 50+ GTA weapons)
- Owner information (linked to character)
Custom Weapon Mappings
If you have custom weapon items, add them to config:
CyberLib.Config.WeaponSync.CustomWeapons = {
['weapon_custom_ar'] = {
type = 'Rifle',
make = 'Custom Arms',
model = 'AR-15',
caliber = '5.56x45mm'
}
}
License Sync
Licenses are pulled from the framework's player metadata and synced to the MDT. The default mapping handles common license types:
| Framework License | MDT License Type |
|---|---|
driver / drive | Driver License |
weapon | Weapons Permit |
hunting | Hunting License |
fishing | Fishing License |
pilot | Pilot License |
Add custom license mappings in CyberLib.Config.LicenseSync.LicenseMap.
Exports
For custom scripts that need to manually interact with the MDT:
-- Check if MDT is connected
local ready = exports['cyber-lib']:IsReady()
-- Manually sync a player's character
exports['cyber-lib']:SyncCharacter(source)
-- Manually register a vehicle
exports['cyber-lib']:SyncVehicle({
plate = 'ABC123',
make = 'Honda',
model = 'Civic',
color = 'White'
}, ownerCid)
-- Manually register a weapon
exports['cyber-lib']:SyncWeapon(source, 'WEAPON_PISTOL', {
serial = 'WPN-12345'
})
-- Get player data (unified across frameworks)
local data = exports['cyber-lib']:GetPlayerData(source)
print(data.firstName, data.lastName, data.cid)
Custom Vehicle Shop Integration
If you have a custom vehicle shop that doesn't fire standard events:
-- In your custom vehicle shop script (server-side):
TriggerEvent('cyber-lib:server:vehicleAdded', plate, model, ownerCid)
-- Or use the export directly:
exports['cyber-lib']:SyncVehicle({ plate = plate, model = model }, ownerCid)
Custom Weapon Shop Integration
-- In your custom weapon shop script (server-side):
TriggerServerEvent('cyber-lib:server:weaponPurchased', itemName, { serial = serialNumber })
Web MDT - Login & Accounts
Access your MDT at https://yourinstance.cyberscripts.shop.
- The first account registered is automatically approved as admin
- Subsequent accounts require admin approval in the Command Center
- Passwords require: 8+ characters, uppercase, lowercase, and a number
- Accounts lock after 5 failed login attempts (15 minute cooldown)
Roles
| Role | Access |
|---|---|
| Owner | Full access. Cannot be demoted. Set during purchase. |
| Admin | Full access including Command Center, user management, stats |
| Command | Can approve users, manage FTOs, add command notes |
| User | Standard officer access (search, calls, reports) |
Civilians
Search civilian records by name, SSN, phone, or CID. Click a result to see full details including:
- Personal info (name, DOB, sex, address, phone)
- License status (Valid, Suspended, Revoked, Expired)
- Wanted status (Clear, Wanted, On Bail)
- Owned vehicles, reports, and licenses
- Officer notes
Vehicles
Search by plate, VIN, or owner name. Vehicle records show registration status, insurance, owner info, and any flags (Stolen, BOLO, Impounded).
Weapons
Search registered firearms by serial number, owner, type, or make/model. Tracks registration status (Registered, Stolen, Seized, Illegal).
CAD / Calls
The Computer Aided Dispatch system manages active calls. Dispatch/Admin users can create, edit, and assign calls. Regular officers can respond and update status.
Call Workflow
Pending → Dispatched → En Route → On Scene → Cleared/Closed
Priority Levels
| Priority | Response | Example |
|---|---|---|
| Urgent | Code 3 (Lights & Sirens) | Shots fired, officer down |
| High | Code 2 (Expedited) | Robbery, traffic collision with injuries |
| Medium | Code 2 | Domestic disturbance, welfare check |
| Low | Code 1 (Routine) | Noise complaint, parking violation |
Reports
Create incident reports, citations, and arrest reports. Reports support:
- Person information (name, DL, DOB)
- Vehicle information (plate, make, model, VIN)
- Offense details (violation, fine, points, court date)
- Narrative/description
- Payment tracking (No, Yes, Partial, Waived)
Unpaid citations past their court date will automatically set the civilian's wanted status to "Wanted" (checked every 60 minutes).
Officers
The Officers tab shows the active roster. Officers can clock in/out, set their status (Available, Busy, En Route, On Scene), and view the full department roster.
FTO System
Admin/Command can designate officers as Field Training Officers (FTO). FTOs can be linked to cadets and add training notes to their profiles.
Command Center
Admin-only section with:
- Approvals — Approve or reject pending officer accounts
- Users — Manage all officers (edit callsign, department, rank, role)
- Statistics — Dashboard with call counts, top officers, records
- Announcements — Post department-wide announcements
- Reports — Delete reports if needed
- Audit Logs — Full audit trail of all actions
- Departments — Create and manage departments (PD, SO, HP, etc.)
QBCore / QBox
CyberScripts MDT has native support for QBCore and QBox. Set Framework = 'auto' (default) and it will detect automatically.
Allowed Jobs
Edit Config.AllowedJobs in the MDT config to match your server's police job names:
Config.AllowedJobs = {
'police', -- LSPD
'sheriff', -- BCSO
'state', -- State Police
'dispatch', -- Dispatch
}
Duty Sync
When an officer clocks in/out on the web MDT, their duty status syncs with the in-game character. The MDT also auto-clocks out officers who are inactive for 3+ hours.
ESX
ESX is fully supported. The framework bridge handles the differences in player data structure, vehicle tables, and license systems automatically.
ESX servers should use oxmysql for best compatibility with CyberLib database queries.
Standalone
For servers without QBCore or ESX, the MDT supports standalone mode using ACE permissions. Configure allowed identifiers in the MDT config.
API Reference
The MDT exposes a REST API for integration. All endpoints require authentication via X-API-Key header for server-side requests.
Civilians
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/civilians | Create civilian |
| PUT | /api/civilians/:cid | Update civilian |
| GET | /api/civilians/by-identifier/:id | Lookup by CID or SSN |
| GET | /api/civilians | Search civilians |
Vehicles
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/vehicles | Create vehicle |
| PUT | /api/vehicles/:plate | Update vehicle |
| GET | /api/vehicles | Search vehicles |
Weapons
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/weapons | Register weapon |
| PUT | /api/weapons/:serial | Update weapon |
| GET | /api/weapons | Search weapons |
Officers / Users
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/users/link-cid | Link character to account |
| GET | /api/users/by-cid/:cid | Get officer by character ID |
| PUT | /api/users/by-cid/:cid/duty-status | Update duty status |
| GET | /api/officers/online | List online officers |
Calls
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/calls | List calls |
| POST | /api/calls | Create call |
| PATCH | /api/calls/:id | Update call |
| POST | /api/calls/:id/respond | Respond to call |
Troubleshooting
License verification failed - HTTP 0
The MDT script can't reach the CyberScripts server. Check:
- Your server has internet access
- The
license.luahas the correct API key - No firewall is blocking outbound HTTPS (port 443)
Characters not syncing to MDT
- Make sure
cyber-libis started aftercyberscripts-mdt - Check the console for
[CyberLib] MDT connection established - Enable debug mode:
CyberLib.Config.Debug = true
Weapons not registering
- Make sure you're using
ox_inventory,qb-inventory, orqs-inventory - Check that the weapon item name starts with
WEAPON_(or add it toCustomWeapons) - Enable debug:
CyberLib.Config.Debug = trueand check console output
White screen on MDT web page
- Hard refresh with
Ctrl+Shift+R - Check browser console (F12) for errors
- Make sure the instance status is "active" in your dashboard
Rate limited / Too many login attempts
Wait 15 minutes, or ask your server admin to restart the MDT web server to clear rate limits.
FAQ
Does it work with any multicharacter system?
Yes. CyberLib hooks into the framework's player-loaded event, which every multichar system triggers (mMultichar, qb-multicharacter, qbx_spawn, etc.).
Do I need to modify my existing scripts?
No. CyberLib listens for standard framework events. It's fully plug-and-play.
Can multiple departments share one MDT?
Yes. The MDT supports multiple departments (PD, SO, HP, etc.) with separate ranks. Officers are assigned to departments.
What happens if the MDT server goes down?
The FiveM script will continue to function. Data syncs will queue and retry when the connection is restored.
Can I use the MDT without the in-game script?
Yes. The web MDT works standalone at yourinstance.cyberscripts.shop. The in-game script just adds the tablet UI and auto-sync features.
How do I add more officers?
Officers register on the web MDT. The first account is auto-approved as admin. Subsequent accounts need to be approved in the Command Center by an admin.
Need help?
Join our Discord for support: discord.gg/CPtwthvjJX