Guida creazione server MCP
Un server MCP (Model Context Protocol) permette a Claude di elencare tutti i file e le cartelle condivise in azienda e leggerne il contenuto (testo semplice, PDF, DOCX, XLSX).
Info
In questa guida sono stati inseriti dei link, riconoscibili dal corsivo (es. server MCP), che spiegano meglio alcune sezioni per renderla più comprensibile.
Requisiti
- Server Linux con Python 3.10 o superiore
- Dominio che punta all’IP pubblico del server (es.
mcp.tuodominio.it) - Reverse proxy HTTPS già configurato (Nginx, Traefik, HAProxy o equivalente)
- Accesso amministrativo al server
- Cartella condivisa contenente i documenti aziendali da rendere disponibili a Claude
- A questa pagina è possibile recuperare il codice Python del server MCP
Info
In questa configurazione il server MCP non gestisce direttamente il certificato SSL. La terminazione HTTPS viene effettuata dal reverse proxy che espone il servizio su Internet.
Configurazione iniziale
Installare le dipendenze di sistema
Aggiornare i repository e installare Python e gli strumenti necessari:
apt update && apt install python3 python3-pip python3-venv acl -yLe librerie installate servono rispettivamente per:
python3: interprete Pythonpython3-pip: gestore pacchetti Pythonpython3-venv: creazione di ambienti virtuali Pythonacl: gestione dei permessi avanzati tramite ACL
Creare una cartella per il progetto
Creare una cartella dedicata al server MCP:
mkdir -p /opt/mcp-fileserver
cd /opt/mcp-fileserverCreare un ambiente virtuale Python
Un ambiente virtuale Python permette di isolare le librerie del progetto dal resto del sistema operativo.
python3 -m venv venv
source venv/bin/activateDopo l’attivazione comparirà normalmente il prefisso (venv) all’inizio della riga di comando.
Installare le librerie Python
Installare le dipendenze richieste dal server:
pip install "mcp>=1.6,<2" uvicorn pymupdf python-docx openpyxl watchdog xlrdQueste librerie permettono al server di:
- comunicare tramite protocollo MCP
- esporre un server HTTP
- leggere file PDF
- leggere documenti Word
- leggere fogli Excel
- monitorare modifiche a file e cartelle
Salvare il codice del server
Creare il file che conterrà il codice Python:
nano /opt/mcp-fileserver/server.pyIncollare il contenuto disponibile a questa pagina.
Salvare e chiudere l’editor (Ctrl+X, poi Y, poi Invio).
Verificare il codice
Prima di procedere è consigliabile verificare che non siano presenti errori sintattici:
python3 -c "import ast; ast.parse(open('server.py').read()); print('OK')"Se tutto è corretto verrà mostrato:
OKCreazione dell’utente dedicato
Per motivi di sicurezza il server MCP non deve essere eseguito come utente root.
Creare quindi un utente di sistema dedicato:
useradd --system --no-create-home mcp-userL’utente mcp-user verrà utilizzato esclusivamente per eseguire il servizio MCP.
File dei segreti
I dati sensibili non devono essere inseriti direttamente nel codice Python.
Creare una cartella dedicata alla configurazione:
mkdir -p /etc/mcp-fileserver
nano /etc/mcp-fileserver/secretsGenerare il client secret
Il client secret viene utilizzato da Claude per autenticarsi verso il server MCP.
Generarlo con:
python3 -c "import secrets; print(secrets.token_hex(32))"Verrà prodotto un valore simile a:
4db4f0f9cb6e0b8f5d3a7f8f6f6b5e1d8a3f2b5e7f1c4d9e2a7b6c8d9f0a1b2Conservarlo perché servirà durante la configurazione di Claude.
Configurare il file secrets
Inserire i valori nel file:
MCP_BASE_DIR=/percorso/cartella/condivisa
MCP_CLIENT_ID=mcp-aziendale
MCP_CLIENT_SECRET=incolla-qui-il-valore-generato
MCP_ALLOWED_HOST=mcp.tuodominio.it
MCP_DB_PATH=/opt/mcp-fileserver/mcp.db
MCP_PORT=8000Descrizione delle variabili:
| Variabile | Descrizione |
|---|---|
| MCP_BASE_DIR | Cartella che contiene i documenti condivisi |
| MCP_CLIENT_ID | Identificativo OAuth utilizzato da Claude |
| MCP_CLIENT_SECRET | Segreto OAuth utilizzato da Claude |
| MCP_ALLOWED_HOST | Nome DNS pubblico del server |
| MCP_DB_PATH | Database locale utilizzato dal server |
| MCP_PORT | Porta TCP sulla quale il server rimane in ascolto |
È possibile definire anche:
MCP_TOKEN_EXPIRY=86400Questa variabile controlla la durata dei token di autenticazione in secondi.
Se omessa viene utilizzato il valore predefinito di 86400 secondi (24 ore).
Proteggere il file dei segreti
Limitare l’accesso al file:
chmod 640 /etc/mcp-fileserver/secrets
chown root:mcp-user /etc/mcp-fileserver/secretsIn questo modo solo root e il servizio MCP potranno leggerne il contenuto.
Permessi di accesso ai documenti
Il server deve poter leggere la cartella condivisa ma non modificarla.
Permessi sulla cartella del progetto
Assegnare la proprietà del progetto all’utente dedicato:
chown -R mcp-user:mcp-user /opt/mcp-fileserverAccesso ai documenti aziendali
Concedere all’utente del servizio l’accesso in sola lettura:
setfacl -R -m u:mcp-user:rX /percorso/cartella/condivisaInfo
Il server potrà leggere file e cartelle ma non modificarli o eliminarli.
Configurazione come servizio systemd
Systemd permette di eseguire automaticamente il server all’avvio del sistema e di riavviarlo in caso di errore.
Creare il file di servizio
nano /etc/systemd/system/mcp-fileserver.serviceContenuto:
[Unit]
Description=MCP File Server Aziendale
After=network.target
[Service]
ExecStart=/opt/mcp-fileserver/venv/bin/python /opt/mcp-fileserver/server.py
Restart=always
User=mcp-user
WorkingDirectory=/opt/mcp-fileserver
Environment=PYTHONUNBUFFERED=1
EnvironmentFile=/etc/mcp-fileserver/secrets
# Hardening
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ReadWritePaths=/opt/mcp-fileserver
ProtectHome=true
[Install]
WantedBy=multi-user.targetSignificato delle opzioni di sicurezza
Le opzioni presenti nella sezione Hardening aumentano la sicurezza del servizio:
NoNewPrivileges=trueimpedisce l’acquisizione di privilegi aggiuntiviPrivateTmp=truefornisce una directory temporanea isolataProtectSystem=strictrende il sistema operativo in sola letturaReadWritePaths=/opt/mcp-fileserverpermette la scrittura solo nella cartella del progettoProtectHome=trueimpedisce l’accesso alle home degli utenti
Approfondimento hardening systemd
Avviare il servizio
Ricaricare la configurazione di systemd:
systemctl daemon-reloadAbilitare il servizio all’avvio:
systemctl enable mcp-fileserverAvviare il servizio:
systemctl start mcp-fileserverVerificare che il servizio sia attivo
systemctl status mcp-fileserverLo stato deve risultare:
active (running)Consultare i log
Per visualizzare i log in tempo reale:
journalctl -u mcp-fileserver -fDurante il primo avvio dovrebbero comparire messaggi simili a:
BASE_DIR=/percorso/cartella/condivisa ...
Token attivi ricaricati dal DB: 0
Indicizzazione iniziale avviata...
Watcher avviato su ...Configurazione del reverse proxy
Il server MCP rimane in ascolto sulla porta configurata tramite MCP_PORT (normalmente 8000).
Il reverse proxy riceve le connessioni HTTPS provenienti da Internet e le inoltra al server MCP.
Schema semplificato:
Claude
│
HTTPS
│
mcp.tuodominio.it
│
Reverse Proxy
│
HTTP localhost:8000
│
Server MCPConfigurazione in Claude Team
Per l’amministratore
- Vai su https://claude.ai
- Apri Organization settings
- Vai nella sezione Connectors
- Clicca Add custom connector
- Compila i campi:
- Name: File Server Aziendale
- URL:
https://mcp.tuodominio.it
- Apri Advanced settings
- OAuth Client ID:
mcp-aziendale - OAuth Client Secret: il valore di
MCP_CLIENT_SECRET
- OAuth Client ID:
- Clicca Add
Per i dipendenti
Ogni membro del team deve:
- Aprire Settings
- Entrare in Connectors
- Individuare il connector aziendale
- Cliccare Connect
Dopo la prima autorizzazione Claude potrà accedere ai documenti condivisi.
Manutenzione
Verificare il numero di file indicizzati
journalctl -u mcp-fileserver | grep "Indicizzazione completata"Forzare una re-indicizzazione completa
Se la struttura documentale cambia radicalmente è possibile ricostruire l’indice:
rm /opt/mcp-fileserver/mcp.db
systemctl restart mcp-fileserverAl riavvio verrà eseguita una nuova scansione completa.
Aggiornare le librerie Python
Attivare l’ambiente virtuale:
source /opt/mcp-fileserver/venv/bin/activateAggiornare le dipendenze:
pip install --upgrade "mcp>=1.6,<2" uvicorn pymupdf python-docx openpyxl watchdog xlrdRiavviare il servizio:
systemctl restart mcp-fileserverRiavviare il server MCP
In caso di manutenzione ordinaria:
systemctl restart mcp-fileserverArrestare il servizio
systemctl stop mcp-fileserverDisabilitare l’avvio automatico
systemctl disable mcp-fileserver