{"id":1367,"date":"2026-03-01T08:00:00","date_gmt":"2026-03-01T07:00:00","guid":{"rendered":"https:\/\/darioiannascoli.it\/blog\/model-context-protocol-mcp-configurazione-server-guida\/"},"modified":"2026-03-01T08:00:00","modified_gmt":"2026-03-01T07:00:00","slug":"model-context-protocol-mcp-configurazione-server-guida","status":"publish","type":"post","link":"https:\/\/darioiannascoli.it\/blog\/model-context-protocol-mcp-configurazione-server-guida\/","title":{"rendered":"Cos&#8217;\u00e8 il Model Context Protocol (MCP) e Come lo Configuro sul Mio Server: Guida Pratica al Nuovo Standard che Connette l&#8217;AI ai Tuoi Servizi"},"content":{"rendered":"<p>Se lavori con server, servizi web e intelligenza artificiale, c&#8217;\u00e8 un protocollo che nel 2026 non puoi pi\u00f9 ignorare: il <strong>Model Context Protocol (MCP)<\/strong>. Nella mia esperienza quotidiana come system administrator, mi sono trovato sempre pi\u00f9 spesso a dover connettere strumenti AI a database, file system e API aziendali. Il problema? Ogni integrazione richiedeva connettori custom, codice ad hoc e ore di debugging. MCP risolve esattamente questo, e oggi vi mostro come funziona e come configurarlo sul vostro server.<\/p>\n<p>Introdotto da <strong>Anthropic<\/strong> a novembre 2024 come standard open source, il Model Context Protocol \u00e8 diventato in poco pi\u00f9 di un anno il protocollo di riferimento per connettere sistemi AI a dati e strumenti esterni. A dicembre 2025 Anthropic ha donato MCP alla <em>Agentic AI Foundation (AAIF)<\/em> sotto la Linux Foundation, con OpenAI e Block come co-fondatori e il supporto di AWS, Google, Microsoft, Cloudflare e Bloomberg. Ad oggi si contano oltre <strong>97 milioni di download mensili<\/strong> degli SDK e pi\u00f9 di <strong>10.000 server attivi<\/strong> nell&#8217;ecosistema.<\/p>\n<p>In questa guida vi porto passo-passo dalla teoria alla pratica: cos&#8217;\u00e8 MCP, come funziona l&#8217;architettura client-server, come creare il vostro primo MCP server in Python e come collegarlo a client come Claude Desktop, VS Code e Cursor. Se avete gi\u00e0 letto il mio articolo sull&#8217;<a href=\"https:\/\/darioiannascoli.it\/blog\/agentic-ai-sistemi-multi-agente-automazione-workflow-strumenti-2026\/\">Agentic AI e i sistemi multi-agente<\/a>, capirete subito perch\u00e9 MCP \u00e8 il tassello mancante per far funzionare davvero gli agenti autonomi.<\/p>\n<h2>Cos&#8217;\u00e8 il Model Context Protocol (MCP) e Perch\u00e9 \u00e8 Importante<\/h2>\n<p>In parole semplici, il <strong>Model Context Protocol<\/strong> \u00e8 uno standard aperto che definisce come i modelli AI (LLM) comunicano con fonti dati esterne e strumenti. Pensatelo come una <strong>porta USB-C per l&#8217;intelligenza artificiale<\/strong>: cos\u00ec come USB-C ha standardizzato la connettivit\u00e0 tra dispositivi, MCP standardizza il modo in cui gli LLM accedono a file, database, API e servizi.<\/p>\n<p>Prima di MCP, ogni integrazione AI richiedeva connettori personalizzati per ogni combinazione modello-servizio, creando quello che Anthropic ha descritto come un problema di integrazione &#8220;N\u00d7M&#8221;. Con MCP si costruisce <strong>un solo connettore riutilizzabile<\/strong> che funziona trasversalmente su modelli ed ecosistemi diversi.<\/p>\n<p>Il protocollo si basa su <strong>JSON-RPC 2.0<\/strong> e riprende il flusso di messaggi del <em>Language Server Protocol (LSP)<\/em>, gi\u00e0 familiare a chi lavora con IDE e editor di codice. Un MCP server espone tre tipi principali di capacit\u00e0:<\/p>\n<ul>\n<li><strong>Resources<\/strong> \u2013 Dati in sola lettura che i client possono consultare (risposte API, contenuti di file, log di sistema)<\/li>\n<li><strong>Tools<\/strong> \u2013 Funzioni che l&#8217;LLM pu\u00f2 invocare (con approvazione dell&#8217;utente) per eseguire azioni concrete<\/li>\n<li><strong>Prompts<\/strong> \u2013 Template predefiniti che guidano l&#8217;utente nel completamento di task specifici<\/li>\n<\/ul>\n<p>La differenza con approcci come il <strong>RAG (Retrieval-Augmented Generation)<\/strong> \u00e8 sostanziale: RAG \u00e8 un approccio monodirezionale che recupera informazioni e le inietta nel modello. MCP \u00e8 un <strong>protocollo bidirezionale<\/strong> che permette agli agenti AI di interagire attivamente con i sistemi esterni, attivare azioni e modificare dati. I sistemi AI pi\u00f9 sofisticati usano entrambi: MCP per l&#8217;orchestrazione, RAG per l&#8217;arricchimento della conoscenza.<\/p>\n<h2>L&#8217;Architettura MCP: Host, Client e Server<\/h2>\n<p>Per capire come configurare MCP sul vostro server, dovete conoscere i tre componenti dell&#8217;architettura:<\/p>\n<ul>\n<li><strong>Host<\/strong> \u2013 L&#8217;applicazione con cui interagite (Claude Desktop, Cursor, VS Code, ChatGPT). \u00c8 l&#8217;interfaccia utente.<\/li>\n<li><strong>Client<\/strong> \u2013 Il componente software integrato nell&#8217;host che parla il protocollo MCP e inoltra le richieste ai server. Spesso host e client coincidono.<\/li>\n<li><strong>Server<\/strong> \u2013 Il programma che espone dati e funzionalit\u00e0 agli LLM. \u00c8 qui che definite i vostri tool, le risorse e i prompt.<\/li>\n<\/ul>\n<p>La comunicazione pu\u00f2 avvenire tramite due modalit\u00e0 di trasporto principali:<\/p>\n<ul>\n<li><strong>STDIO (Standard Input\/Output)<\/strong> \u2013 Il server gira in locale e comunica tramite stdin\/stdout. Ideale per sviluppo e test.<\/li>\n<li><strong>Streamable HTTP \/ SSE (Server-Sent Events)<\/strong> \u2013 Il server \u00e8 raggiungibile via rete tramite HTTP. Perfetto per deployment in produzione e server remoti.<\/li>\n<\/ul>\n<h2>Come Creo il Mio Primo MCP Server in Python: Setup Step-by-Step<\/h2>\n<p>Vi mostro come ho configurato il mio primo MCP server funzionante. Useremo il <strong>Python SDK ufficiale<\/strong> con <em>FastMCP<\/em>, il framework che semplifica enormemente la creazione di server MCP. Nella mia esperienza, \u00e8 il modo pi\u00f9 rapido per partire.<\/p>\n<h3>Prerequisiti<\/h3>\n<ul>\n<li>Python 3.10+ installato sul server<\/li>\n<li><strong>uv<\/strong> come package manager (molto pi\u00f9 veloce di pip)<\/li>\n<li>Un terminale Linux\/macOS (o PowerShell su Windows)<\/li>\n<\/ul>\n<h3>Step 1: Creare il progetto e installare le dipendenze<\/h3>\n<p>Aprite il terminale e create un nuovo progetto:<\/p>\n<pre><code># Installa uv se non lo hai ancora\ncurl -LsSf https:\/\/astral.sh\/uv\/install.sh | sh\n\n# Crea il progetto\nuv init mio-mcp-server\ncd mio-mcp-server\n\n# Crea e attiva l'ambiente virtuale\nuv venv\nsource .venv\/bin\/activate\n\n# Installa l'SDK MCP con il CLI\nuv add \"mcp[cli]\" httpx<\/code><\/pre>\n<h3>Step 2: Creare il file del server<\/h3>\n<p>Create un file <code>server.py<\/code> con il seguente contenuto. In questo esempio creo un server MCP che espone un tool per controllare lo stato dei servizi di un server Linux \u2014 uno scenario che mi capita quotidianamente:<\/p>\n<pre><code>import subprocess\nfrom mcp.server.fastmcp import FastMCP\n\n# Inizializza il server MCP\nmcp = FastMCP(\"ServerAdmin\")\n\n# Tool: controlla lo stato di un servizio systemd\n@mcp.tool()\ndef check_service_status(service_name: str) -&gt; str:\n    \"\"\"Controlla lo stato di un servizio systemd sul server.\"\"\"\n    try:\n        result = subprocess.run(\n            [\"systemctl\", \"is-active\", service_name],\n            capture_output=True, text=True, timeout=10\n        )\n        status = result.stdout.strip()\n        return f\"Il servizio {service_name} \u00e8: {status}\"\n    except Exception as e:\n        return f\"Errore nel controllo di {service_name}: {str(e)}\"\n\n# Tool: mostra l'utilizzo disco\n@mcp.tool()\ndef disk_usage() -&gt; str:\n    \"\"\"Mostra l'utilizzo dello spazio disco del server.\"\"\"\n    result = subprocess.run(\n        [\"df\", \"-h\", \"--total\"],\n        capture_output=True, text=True\n    )\n    return result.stdout\n\n# Resource: espone le info di sistema\n@mcp.resource(\"system:\/\/info\")\ndef system_info() -&gt; str:\n    \"\"\"Informazioni di base sul sistema operativo.\"\"\"\n    result = subprocess.run(\n        [\"uname\", \"-a\"],\n        capture_output=True, text=True\n    )\n    return result.stdout.strip()\n\n# Avvia il server\nif __name__ == \"__main__\":\n    mcp.run(transport=\"stdio\")<\/code><\/pre>\n<p>All&#8217;inizio non funzionava perch\u00e9 avevo dimenticato di impostare il <code>timeout<\/code> sulla chiamata a systemctl \u2014 su un servizio bloccato il server restava appeso. Aggiungere il parametro <code>timeout=10<\/code> ha risolto il problema.<\/p>\n<h3>Step 3: Testare con MCP Inspector<\/h3>\n<p>Prima di collegare il server a un client AI, testatelo con l&#8217;<strong>MCP Inspector<\/strong>, un tool GUI che permette di verificare che tutto funzioni:<\/p>\n<pre><code># Avvia l'inspector\nnpx @modelcontextprotocol\/inspector uv run server.py<\/code><\/pre>\n<p>Si aprir\u00e0 un&#8217;interfaccia web su localhost dove potrete vedere i tool registrati, invocarli con input di test e verificare gli output. \u00c8 uno strumento che uso sempre prima del deployment.<\/p>\n<h2>Come Collego il Server MCP ai Client AI<\/h2>\n<p>Una volta creato il server, il passo successivo \u00e8 collegarlo ai client. Vi mostro come farlo con i tre client pi\u00f9 diffusi.<\/p>\n<h3>Configurazione per Claude Desktop<\/h3>\n<p>Claude Desktop cerca la configurazione dei server MCP in un file JSON. Su macOS il percorso \u00e8 <code>~\/Library\/Application Support\/Claude\/claude_desktop_config.json<\/code>, su Windows cercate nella cartella AppData:<\/p>\n<pre><code>{\n  \"mcpServers\": {\n    \"server-admin\": {\n      \"command\": \"\/percorso\/al\/progetto\/.venv\/bin\/python\",\n      \"args\": [\"\/percorso\/al\/progetto\/server.py\"]\n    }\n  }\n}<\/code><\/pre>\n<p>Dopo aver salvato il file, <strong>riavviate completamente Claude Desktop<\/strong> (su macOS Cmd+Q, non basta chiudere la finestra). Se tutto \u00e8 configurato correttamente, vedrete le icone dei tool disponibili nella chat.<\/p>\n<h3>Configurazione per VS Code \/ Copilot<\/h3>\n<p>In VS Code potete aggiungere server MCP attraverso il file <code>mcp.json<\/code> nella cartella <code>.vscode<\/code> del workspace oppure a livello globale nel profilo utente:<\/p>\n<pre><code>{\n  \"servers\": {\n    \"server-admin\": {\n      \"command\": \"uv\",\n      \"args\": [\"run\", \"\/percorso\/al\/progetto\/server.py\"]\n    }\n  }\n}<\/code><\/pre>\n<p>VS Code rileva automaticamente i tool del server e li rende disponibili nella chat di Copilot. Chi ha letto la mia guida sui <a href=\"https:\/\/darioiannascoli.it\/blog\/modelli-ai-open-source-small-language-model-deepseek-granite-ollama-2026\/\">modelli AI open source con Ollama<\/a> apprezzer\u00e0 la possibilit\u00e0 di collegare MCP anche a modelli locali.<\/p>\n<h3>Configurazione per Cursor<\/h3>\n<p>In Cursor, aprite le impostazioni MCP e aggiungete un nuovo server globale con la stessa struttura JSON. Il processo \u00e8 praticamente identico a Claude Desktop.<\/p>\n<h2>Deploy in Produzione: Server MCP Remoto con HTTP<\/h2>\n<p>Per un ambiente di produzione, il trasporto STDIO non basta. Ho configurato i miei server MCP con trasporto <strong>Streamable HTTP<\/strong> per renderli accessibili da remoto. Ecco come modificare il server:<\/p>\n<pre><code># Cambiare l'ultima riga del server.py\nif __name__ == \"__main__\":\n    mcp.run(transport=\"streamable-http\", host=\"0.0.0.0\", port=8000)<\/code><\/pre>\n<p>A questo punto il server risponde su <code>http:\/\/vostro-ip:8000\/mcp<\/code>. Per la produzione, vi consiglio di:<\/p>\n<ul>\n<li>Mettere il server MCP dietro un <strong>reverse proxy Nginx<\/strong> con SSL \u2014 come descritto nella mia <a href=\"https:\/\/darioiannascoli.it\/blog\/reverse-proxy-nginx-piu-siti-server\/\">guida al reverse proxy Nginx<\/a><\/li>\n<li>Proteggere l&#8217;endpoint con <strong>API key<\/strong> o OAuth 2.1<\/li>\n<li>Configurare <a href=\"https:\/\/darioiannascoli.it\/blog\/configurare-fail2ban-plesk\/\">Fail2Ban<\/a> per proteggere da tentativi di accesso non autorizzati<\/li>\n<li>Monitorare le risorse con <a href=\"https:\/\/darioiannascoli.it\/blog\/monitoraggio-risorse-server-plesk-grafana-prometheus\/\">Grafana e Prometheus<\/a><\/li>\n<\/ul>\n<p>Con Docker, il deploy diventa ancora pi\u00f9 semplice. Create un <code>Dockerfile<\/code>:<\/p>\n<pre><code>FROM python:3.12-slim\nWORKDIR \/app\nCOPY . .\nRUN pip install \"mcp[cli]\" httpx\nEXPOSE 8000\nCMD [\"python\", \"server.py\"]<\/code><\/pre>\n<h2>Sicurezza MCP: Cosa Ho Imparato sul Campo<\/h2>\n<p>La sicurezza \u00e8 un aspetto critico di MCP che non potete trascurare. Nella specifica di novembre 2025 sono state introdotte importanti migliorie, ma restano punti di attenzione:<\/p>\n<ul>\n<li><strong>Autenticazione<\/strong> \u2013 I server MCP sono ora classificati come <em>OAuth Resource Servers<\/em>. In produzione usate sempre autenticazione con token.<\/li>\n<li><strong>Resource Indicators (RFC 8707)<\/strong> \u2013 Obbligatori per impedire a server malevoli di ottenere token di accesso non autorizzati.<\/li>\n<li><strong>Permessi granulari<\/strong> \u2013 Definite con precisione cosa ogni tool pu\u00f2 fare. Non esponete comandi di sistema senza sandboxing.<\/li>\n<li><strong>Logging e audit<\/strong> \u2013 Ogni interazione MCP pu\u00f2 e deve essere loggata. Un requisito fondamentale anche per la <a href=\"https:\/\/darioiannascoli.it\/blog\/plesk-conforme-direttiva-nis2-logging-action-log-autenticazione-checklist\/\">conformit\u00e0 alla direttiva NIS2<\/a>.<\/li>\n<\/ul>\n<p>Ho commesso l&#8217;errore di esporre inizialmente un tool che eseguiva comandi shell arbitrari. Non fatelo mai: limitate ogni tool a una funzione specifica e validate sempre gli input.<\/p>\n<h2>Chi Sta Adottando MCP nel 2026<\/h2>\n<p>L&#8217;ecosistema MCP \u00e8 esploso. A febbraio 2026 il protocollo \u00e8 supportato nativamente da <strong>Claude, ChatGPT, Gemini, Microsoft Copilot, Cursor e VS Code<\/strong>. Google ha lanciato server MCP gestiti per Maps, BigQuery, Compute Engine e Kubernetes Engine. Salesforce ha integrato MCP nella piattaforma Agentforce 3. Aziende come Outreach e Supermetrics hanno rilasciato i propri MCP server nelle ultime settimane.<\/p>\n<p>Il W3C ha in programma per aprile 2026 le discussioni formali su &#8220;MCP-Identity&#8221;, un&#8217;iniziativa per standardizzare come gli agenti AI si autenticano sul web \u2014 una sorta di passaporto digitale per gli agenti.<\/p>\n<p>Per chi segue le <a href=\"https:\/\/darioiannascoli.it\/blog\/novita-ai-fine-febbraio-2026-gpt5-claude-opus-ai-act-agenti\/\">novit\u00e0 AI di fine febbraio 2026<\/a>, MCP \u00e8 diventato il collante che tiene insieme l&#8217;intero ecosistema degli agenti autonomi.<\/p>\n<h2>FAQ<\/h2>\n<h3>MCP funziona solo con Claude o anche con altri modelli AI?<\/h3>\n<p>MCP \u00e8 uno standard aperto e <strong>model-agnostic<\/strong>. Funziona con Claude, ChatGPT, Gemini, Copilot, e qualsiasi client che implementi il protocollo. Potete usarlo anche con modelli locali tramite Ollama, come spiego nella mia <a href=\"https:\/\/darioiannascoli.it\/blog\/installare-modello-ai-locale-ollama\/\">guida a Ollama<\/a>.<\/p>\n<h3>Qual \u00e8 la differenza tra MCP e RAG?<\/h3>\n<p>RAG \u00e8 un approccio monodirezionale che recupera informazioni e le inserisce nel contesto del modello. MCP \u00e8 un protocollo bidirezionale che permette all&#8217;AI di interagire attivamente con sistemi esterni, eseguire azioni e modificare dati. I sistemi avanzati usano entrambi insieme.<\/p>\n<h3>Posso creare un MCP server senza saper programmare?<\/h3>\n<p>Serve una conoscenza base di Python o JavaScript. Tuttavia, grazie ai template dell&#8217;SDK ufficiale e a strumenti come FastMCP, la curva di apprendimento \u00e8 molto ridotta. Un server di base si crea in meno di 50 righe di codice.<\/p>\n<h3>MCP \u00e8 sicuro per ambienti di produzione?<\/h3>\n<p>La specifica di novembre 2025 ha introdotto autorizzazione OAuth 2.1, esecuzione asincrona e governance enterprise. Per la produzione \u00e8 fondamentale configurare autenticazione, SSL, logging e permessi granulari. Non esponete mai server MCP senza protezioni adeguate.<\/p>\n<h3>Dove trovo server MCP gi\u00e0 pronti da usare?<\/h3>\n<p>Il registro ufficiale su <strong>modelcontextprotocol.io<\/strong> contiene centinaia di server pre-costruiti per servizi come GitHub, Slack, Google Drive, Postgres, AWS e molti altri. In VS Code potete cercarli direttamente dalla galleria delle estensioni con il filtro <code>@mcp<\/code>.<\/p>\n<h2>Conclusione<\/h2>\n<p>Il <strong>Model Context Protocol<\/strong> ha cambiato il modo in cui penso all&#8217;integrazione tra AI e infrastruttura server. Da standard interno di Anthropic a protocollo governato dalla Linux Foundation con il supporto di tutti i big player, MCP \u00e8 diventato l'&#8221;USB-C dell&#8217;intelligenza artificiale&#8221; in appena un anno.<\/p>\n<p>Se gestite server, sviluppate applicazioni o lavorate con l&#8217;AI, il mio consiglio \u00e8 iniziare subito: create un server MCP di prova con il Python SDK, testatelo con l&#8217;Inspector, e collegatelo al vostro client preferito. Il protocollo \u00e8 maturo abbastanza per la produzione, ma abbastanza semplice per iniziare in un pomeriggio.<\/p>\n<p>Avete gi\u00e0 configurato un server MCP? Quali tool avete creato? Raccontatemi la vostra esperienza nei commenti \u2014 sono curioso di sapere come lo state usando nel vostro workflow quotidiano.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Guida pratica al Model Context Protocol (MCP): cos&#8217;\u00e8, come funziona e come configurare un server MCP in Python per connettere l&#8217;AI ai tuoi servizi.<\/p>\n","protected":false},"author":1,"featured_media":1368,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"Model Context Protocol MCP: Guida alla Configurazione Server","_seopress_titles_desc":"Cos'\u00e8 il Model Context Protocol e come configurarlo sul server: guida pratica con Python SDK, Claude Desktop e VS Code. Setup completo step-by-step.","_seopress_robots_index":"","footnotes":""},"categories":[3],"tags":[301,333,332,331,334],"class_list":["post-1367","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hosting","tag-agentic-ai","tag-ai-integration","tag-mcp-server","tag-model-context-protocol","tag-python-sdk"],"_links":{"self":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/1367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/comments?post=1367"}],"version-history":[{"count":0,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/1367\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media\/1368"}],"wp:attachment":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media?parent=1367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/categories?post=1367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/tags?post=1367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}