Nel mondo dell’integrazione tra Intelligenza Artificiale (AI) e infrastrutture dati, la necessità di un nodo intermedio intelligente capace di orchestrare, tradurre e indirizzare le informazioni tra sistemi diversi è sempre più concreta. È qui che entra in gioco il concetto di MCP (Modular Computing Platform o Modular Control Point).
Questo articolo ti guiderà, passo dopo passo, nella comprensione del ruolo di un MCP come ponte tra AI e sistemi dati, mostrandoti come simularlo localmente con Laragon e come collegare un modello AI scritto in Python a un database MySQL attraverso API PHP.
Cos’è un Server MCP?
Un MCP (Modular Computing Platform) è un sistema software/hardware che funge da intermediario modulare e compatibile tra componenti differenti di un’infrastruttura IT. Non è un prodotto singolo, ma un concetto architetturale applicabile anche in ambienti locali, come nel nostro caso con Laragon.
Caratteristiche principali:
- Modularità: può contenere componenti eterogenei (API, database, AI, file system, servizi REST)
- Compatibilità: comunica con linguaggi e protocolli diversi (HTTP, MQTT, JSON, DBMS)
- Controllo dati: filtra, indirizza e trasforma i dati tra un sistema AI e un’infrastruttura
Architettura Locale del MCP
Di seguito riporto: il codice per il DB MySQL, il codice per la API MCP, uno script python che invia i dati alla API.
CREATE DATABASE mcp_db;
USE mcp_db;
CREATE TABLE ai_dati (
id INT AUTO_INCREMENT PRIMARY KEY,
valore TEXT,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);<?php
// api.php
header("Content-Type: application/json");
// Connessione al database
$conn = new mysqli("localhost", "root", "", "mcp_db");
if ($conn->connect_error) {
die(json_encode(["error" => "Connessione fallita"]));
}
// Ricezione JSON
$input = json_decode(file_get_contents("php://input"), true);
$valore = $input["valore"] ?? null;
if ($valore !== null) {
$stmt = $conn->prepare("INSERT INTO ai_dati (valore) VALUES (?)");
$stmt->bind_param("s", $valore);
$stmt->execute();
echo json_encode(["status" => "OK", "inserito" => $valore]);
} else {
echo json_encode(["error" => "Dati mancanti"]);
}import requests
import json
# Dato generato da un modello AI o da input locale
valore_ai = "22.7" # esempio: previsione di una temperatura ambiente (output da regressione)
# URL del server MCP locale (via Laragon)
url = "http://localhost/mcp-server/api.php"
# Invio dati al MCP
response = requests.post(url, json={"valore": valore_ai})
# Risposta dal server
print("Risposta MCP:", response.json())Vi sembra una normale REST API JSON? Sì è vero, ma è la sua funzione architetturale, il modo in cui viene integrata e organizzata, che la fa assomigliare (o diventare) un nodo MCP. Vediamo cosa distingue un MCP da una semplice API REST:
| Caratteristica | REST API classica | MCP (Modular Control Platform) |
|---|---|---|
| Finalità | Esporre dati o funzioni | Orchestrare e integrare moduli diversi |
| Struttura | Endpoint singoli o specifici | Ambiente modulare: API, storage, logica, AI, IO, sicurezza |
| Ruolo architetturale | Parte di un sistema | Nodo centrale di comunicazione e controllo |
| Compatibilità e interoperabilità | Limitata al dominio in cui è progettata | Estesa a più tecnologie, protocolli e ambienti (IT + OT) |
| Gestione del dato | Ingresso/uscita tramite HTTP | Controllo del flusso dati, storage, routing, validazione |
| Evoluzione | Focalizzata sullo specifico caso d’uso | Scalabile e modulare, può inglobare API, AI, DB, UI, ecc. |
Una singola API non è un MCP. Ma una struttura modulare che include una o più API, un database, logica AI e flussi dati sì, se:
- Funge da punto di raccolta e smistamento dati tra sistemi diversi (es. AI → DB → Dashboard)
- Traduce protocolli o modelli dati (es. JSON → SQL, CSV → JSON, MQTT → REST)
- Controlla il flusso informativo con logiche condizionali, sicurezza, validazione
- È compatibile con più tecnologie (es. Python, PHP, MQTT, SQL, Docker…)
- È modulare: ogni parte può essere sostituita, estesa, separata (tipico di MCP)
Una REST API è un componente.
Un MCP è un’architettura modulare, dove la REST API è solo una delle “porte” di comunicazione.
Aggiungiamo delle features alla nostra api.php per trasformarla in mcp_server.php
<?php
// mcp_server.php
header("Content-Type: application/json");
// Configurazioni base
$LOG_FILE = __DIR__ . "/mcp_log.txt";
$CSV_FILE = __DIR__ . "/dati_ai.csv";
$NOTIFICA_EMAIL = false; // Imposta true se vuoi attivare l'invio email
// Funzione logging
function scriviLog($msg) {
global $LOG_FILE;
$riga = "[" . date("Y-m-d H:i:s") . "] $msg\n";
file_put_contents($LOG_FILE, $riga, FILE_APPEND);
}
// Funzione scrittura su CSV
function scriviCSV($valore, $fonte) {
global $CSV_FILE;
$riga = [$valore, $fonte, date("Y-m-d H:i:s")];
$file = fopen($CSV_FILE, 'a');
fputcsv($file, $riga);
fclose($file);
}
// Funzione invio email (opzionale)
function inviaNotifica($valore, $fonte) {
$destinatario = "admin@localhost"; // Cambia con email valida
$oggetto = "Nuovo dato MCP da $fonte";
$messaggio = "Valore ricevuto: $valore\nFonte: $fonte\nOra: " . date("Y-m-d H:i:s");
mail($destinatario, $oggetto, $messaggio);
}
// Connessione al DB
$conn = new mysqli("localhost", "root", "", "mcp_db");
if ($conn->connect_error) {
scriviLog("Errore DB: " . $conn->connect_error);
die(json_encode(["error" => "Errore connessione database"]));
}
// Ricezione e parsing input
$input_raw = file_get_contents("php://input");
$input = json_decode($input_raw, true);
// Validazione input
$valore = $input["valore"] ?? null;
$fonte = $input["fonte"] ?? "sconosciuta";
if ($valore === null || !is_numeric($valore)) {
scriviLog("Input non valido da $fonte - Payload: $input_raw");
echo json_encode(["error" => "Valore mancante o non numerico"]);
exit;
}
// Inserimento nel database
$stmt = $conn->prepare("INSERT INTO ai_dati (valore, fonte) VALUES (?, ?)");
$stmt->bind_param("ss", $valore, $fonte);
$stmt->execute();
// Logging e CSV
scriviLog("Dato valido ricevuto da $fonte: $valore");
scriviCSV($valore, $fonte);
if ($NOTIFICA_EMAIL) {
inviaNotifica($valore, $fonte);
}
// Risposta JSON
echo json_encode([
"status" => "OK",
"valore" => $valore,
"fonte" => $fonte,
"timestamp" => date("Y-m-d H:i:s")
]);CREATE DATABASE IF NOT EXISTS mcp_db;
USE mcp_db;
CREATE TABLE ai_dati (
id INT AUTO_INCREMENT PRIMARY KEY,
valore VARCHAR(255),
fonte VARCHAR(255),
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);import requests
data = {
"valore": 37.5,
"fonte": "python_model"
}
res = requests.post("http://localhost/mcp-server/mcp_server.php", json=data)
print(res.json())Al momento non esiste uno standard universale per i sistemi denominati MCP (Modular Computing Platform o Modular Control Point). Tuttavia, esistono linee guida architetturali comuni e modelli industriali che ne rappresentano il concetto.
| Principio | Dettaglio |
|---|---|
| Modularità funzionale | Ogni componente (AI, API, storage, logica) è separabile e sostituibile |
| Comunicazione standard | Uso di protocolli aperti: REST, MQTT, OPC UA, WebSocket, JSON |
| Compatibilità orizzontale | Deve integrarsi con sistemi legacy e moderni (DB, cloud, sensori) |
| Gestione distribuita | Supporta il controllo, il monitoraggio e l’aggiornamento remoto |
| Scalabilità fisica o logica | Possibilità di aggiungere moduli senza rifare tutto l’impianto |
| Standard / Tecnologia | Funzione principale |
|---|---|
| OPC UA | Interoperabilità tra dispositivi industriali (OT ↔ IT) |
| MQTT | Protocollo leggero per comunicazioni IoT ed edge computing |
| RESTful API / JSON-RPC | Comunicazione tramite HTTP tra moduli e sistemi |
| Docker / OCI | Packaging e isolamento modulare delle funzioni (es. AI, API, DB) |
| Pub/Sub | Comunicazione asincrona e scalabile tra componenti |
| IEC 61499 / PLCopen | Standard per automazione modulare e controllo distribuito |
| Modulo | Funzione |
|---|---|
| API REST | Riceve i dati, espone endpoint, dialoga con fonti esterne |
| Modulo AI | Contiene modelli ML/AI (es. regressione, classificazione, LLM…) |
| Modulo Logica/Rules | Applica regole condizionali (es. soglie, trigger, routing decisionale) |
| Validazione Input | Verifica struttura, tipo, sicurezza, API key, origine |
| Logging e Audit | Registra eventi, errori, input, transazioni |
| Storage | Salva i dati in database SQL o time-series |
| Output/Notifiche | Invia dati o avvisi a sistemi esterni via email, MQTT o webhook |
| Interfaccia Web | Mostra dati, log, stato sistema (Grafana, Dash, admin panel) |
| Input Esterni | Qualunque client: Arduino, Python, API di altri sistemi, etc. |
| Modulo | Tecnologie consigliate |
|---|---|
| API REST | PHP (Laragon), Flask (Python), Express (Node) |
| AI/ML | Python (scikit-learn, PyTorch, TensorFlow) |
| Logica / Rules | PHP, Python, JSON-based routing config |
| Validazione | JSON Schema, regex, middleware custom |
| Logging | Monolog (PHP), logging (Python), txt/CSV |
| Storage | MySQL, PostgreSQL, InfluxDB |
| Notifiche / Output | PHPMailer, SMTP, MQTT, Discord Webhook, etc. |
| UI / Dashboard | Grafana, Vue.js, PHPAdmin, custom panel |

Best practice integrate nello schema:
✅ Modularità logica e fisica
✅ Separazione dei ruoli (AI, dati, logica, sicurezza)
✅ Compatibilità con protocolli aperti
✅ Estendibilità orizzontale (puoi duplicare o ridistribuire moduli)
✅ Logging e tracciabilità per audit
✅ Supporto a diverse fonti di input
✅ Pronto per essere containerizzato (Docker-ready)
Sebbene MCP non sia uno standard formale, la sua forza risiede proprio nella capacità di integrare standard già esistenti, selezionandoli in base al contesto d’uso. In pratica, un MCP è efficace quanto lo sono i componenti che lo costituiscono e la loro capacità di dialogare tra loro. La sua vera potenza non è nel nome, ma nel metodo con cui orchestra API, AI, dati e dispositivi eterogenei in un sistema coerente, osservabile e controllabile. Se costruito bene, un MCP è meno uno strumento e più un linguaggio d’integrazione per l’intero ecosistema IT/OT.
Se l’articolo ti è piaciuto restiamo in contatto su linkedin a: https://www.linkedin.com/in/andreatonin/
Nerd per passione e per professione da oltre 30 anni, lavoro nel mondo dell’innovazione tecnologica come CTO e consulente, progettando ecosistemi software complessi e scalabili. Parallelamente mi dedico alla formazione informatica, condividendo esperienze e buone pratiche maturate sul campo.
Scopri di più sulla mia attività di consulenza su lucedigitale.com Mi trovi anche su LinkedIn



















