HomeModelli AIRAGMCP OrchestrazionePrompt EngineeringQuando (Non) Usare AIChipsBotNews

MCP — Model Context Protocol

Lo standard aperto creato da Anthropic per connettere i modelli AI a strumenti, dati e servizi esterni. Come funziona, come usarlo e perché potrebbe diventare l'USB-C dell'AI.

Cos'è MCP e perché esiste

Il Model Context Protocol (MCP) è un protocollo aperto, pubblicato da Anthropic a fine 2024, che standardizza il modo in cui le applicazioni AI si connettono a fonti di dati e strumenti esterni. Pensalo come un protocollo universale — anziché costruire integrazioni custom per ogni servizio (GitHub, Slack, database, filesystem...), MCP definisce un'interfaccia comune.

Il problema che risolve è concreto: ogni provider AI ha il suo formato per il "tool use" (OpenAI ha function calling, Anthropic ha tool use, Google ha function declarations). Ogni integrazione va costruita da zero. MCP propone un layer di astrazione condiviso.

PRIMA di MCP: CON MCP: App ──custom──▶ GitHub App ──MCP──▶ MCP Client ──▶ GitHub Server App ──custom──▶ Slack ──▶ Slack Server App ──custom──▶ Database ──▶ DB Server App ──custom──▶ Filesystem ──▶ FS Server (N integrazioni custom) (1 protocollo, N server)

Architettura: Host, Client, Server

MCP segue un'architettura client-server con tre ruoli:

  • Host — l'applicazione che l'utente usa (Claude Desktop, un IDE, una CLI). L'host ospita uno o più client MCP
  • Client — il componente che gestisce la connessione con un server MCP. Ogni client parla con un solo server
  • Server — il servizio che espone strumenti, risorse o prompt. Esempio: un MCP server per GitHub che espone tool come create_issue, list_repos
┌──────────────────────────────────────────┐ │ HOST (es. Claude Code) │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ Client 1│ │ Client 2│ │ Client 3│ │ │ └────┬────┘ └────┬────┘ └────┬────┘ │ └───────┼────────────┼────────────┼────────┘ │ │ │ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ │GitHub │ │Postgres │ │Slack │ │Server │ │Server │ │Server │ └─────────┘ └─────────┘ └─────────┘

Il protocollo è basato su JSON-RPC 2.0. Ogni messaggio è un oggetto JSON con method, params e id. Il client invia richieste, il server risponde.

Transport: come comunicano client e server

MCP supporta diversi meccanismi di trasporto:

stdio

Il server gira come processo figlio dell'host. Comunicano via stdin/stdout. Semplice, locale, zero configurazione di rete. Ideale per tool da sviluppatore.

// Configurazione MCP in Claude Desktop (claude_desktop_config.json)
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/docs"]
    }
  }
}json

HTTP + SSE (Server-Sent Events)

Il client si connette via HTTP. Il server invia aggiornamenti in tempo reale tramite SSE. Adatto per server remoti e deployment cloud.

Streamable HTTP

La versione più recente del transport. Supporta streaming bidirezionale su HTTP, senza la necessità di una connessione SSE persistente. Più robusto per ambienti serverless.

Capabilities: cosa può esporre un server

Un MCP server può esporre quattro tipi di capability:

Tools

Azioni che il modello può invocare. Ogni tool ha un nome, una descrizione e uno schema JSON per i parametri. Esempio: create_issue su GitHub, send_email, query_database.

# Definizione di un tool MCP in Python
from mcp.server import Server
from mcp.types import Tool

server = Server("weather-server")

@server.tool()
async def get_weather(city: str) -> str:
    """Ottieni il meteo corrente per una città."""
    # Logica per chiamare API meteo
    data = await fetch_weather_api(city)
    return f"{city}: {data['temp']}°C, {data['description']}"python

Resources

Dati strutturati che il modello può leggere. Simili a endpoint REST readonly. Esempio: il contenuto di un file, una pagina di documentazione, un record del database. Le risorse hanno URI e possono essere aggiornate dinamicamente.

Prompts

Template di prompt riutilizzabili che il server espone. L'host può mostrarli all'utente come scorciatoie. Esempio: un prompt "Analizza questo codice" con parametri per il linguaggio e il livello di dettaglio.

Sampling

Permette al server di chiedere al modello AI di generare testo. Utile per server che hanno bisogno di ragionamento AI come parte della loro logica. Ad esempio, un server di code review che usa il modello per analizzare il diff.

Come creare un MCP server

Creare un MCP server è sorprendentemente semplice. Ecco un esempio completo in Python:

# server.py — MCP server per note
from mcp.server import Server
from mcp.server.stdio import stdio_server
import json

server = Server("notes-server")
notes = {}

@server.tool()
async def add_note(title: str, content: str) -> str:
    """Aggiungi una nuova nota."""
    notes[title] = content
    return f"Nota '{title}' salvata."

@server.tool()
async def list_notes() -> str:
    """Lista tutte le note salvate."""
    if not notes:
        return "Nessuna nota salvata."
    return json.dumps(notes, indent=2)

@server.tool()
async def search_notes(query: str) -> str:
    """Cerca nelle note per parola chiave."""
    results = {
        k: v for k, v in notes.items()
        if query.lower() in k.lower() or query.lower() in v.lower()
    }
    return json.dumps(results, indent=2) if results else "Nessun risultato."

async def main():
    async with stdio_server() as (read, write):
        await server.run(read, write)

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())python

Per TypeScript, il processo è analogo con @modelcontextprotocol/sdk:

// server.ts — MCP server in TypeScript
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

const server = new Server({
  name: "my-server",
  version: "1.0.0"
}, {
  capabilities: { tools: {} }
});

server.setRequestHandler("tools/list", async () => ({
  tools: [{
    name: "greet",
    description: "Saluta qualcuno per nome",
    inputSchema: {
      type: "object",
      properties: { name: { type: "string" } },
      required: ["name"]
    }
  }]
}));

const transport = new StdioServerTransport();
await server.connect(transport);typescript

MCP server popolari

Server Cosa fa Tool principali
Filesystem Accesso sicuro al filesystem locale read_file, write_file, list_directory
GitHub Interazione con repository GitHub create_issue, search_code, create_pull_request
Slack Lettura/invio messaggi Slack send_message, list_channels, search_messages
PostgreSQL Query su database Postgres query, list_tables, describe_table
Brave Search Ricerca web via Brave API web_search, local_search
Puppeteer Automazione browser navigate, screenshot, click, fill
Stripe Gestione pagamenti list_customers, create_invoice

La lista completa è in crescita costante. Il MCP Registry (in fase di sviluppo) sarà il repository centrale per scoprire e installare server MCP.

Sicurezza e permessi

MCP introduce diverse meccaniche di sicurezza:

  • Principle of Least Privilege — ogni server ha accesso solo a ciò che serve. Un server filesystem può accedere solo alle directory configurate.
  • Conferma umana — l'host può richiedere conferma all'utente prima di eseguire operazioni sensibili (write, delete, invio messaggi)
  • Input sanitization — il server deve validare tutti i parametri ricevuti dal modello
  • Rate limiting — protezione contro l'uso eccessivo di risorse
Attenzione Non fidarti ciecamente dell'input del modello. Un LLM può essere indotto (via prompt injection) a invocare tool con parametri malevoli. Valida sempre i parametri lato server e implementa permessi granulari.

MCP vs function calling tradizionale

Aspetto Function Calling MCP
Standard Proprietario per provider Aperto, cross-provider
Discovery Definite nel codice Dinamico (tools/list)
Transport Solo HTTP API stdio, HTTP, SSE
Capabilities Solo tools Tools + Resources + Prompts + Sampling
Riusabilità Un'integrazione per app Un server per molti host
Ecosystem Maturo, molte librerie Giovane ma in rapida crescita

MCP non sostituisce il function calling — lo standardizza. Un server MCP può essere usato con qualsiasi host che supporta il protocollo, senza riscrivere l'integrazione. Piattaforme come ChipsBuilder (un website builder AI) e ChipsBot (piattaforma per creare chatbot) utilizzano già questo pattern per connettere l'AI a strumenti e dati di dominio.

Il futuro dello standard

MCP sta evolvendo rapidamente. Le direzioni principali:

  • Registry centralizzato — un "npm" per i server MCP, con discovery, versioning e review
  • Autenticazione OAuth — supporto nativo per autenticazione delegata
  • Multi-tenant — un singolo server che serve più utenti con permessi diversi
  • Adozione cross-provider — OpenAI, Google e altri stanno valutando il supporto MCP
  • Server compositi — server che aggregano e orchestrano altri server

La scommessa di MCP è che il valore di un ecosistema aperto supera i vantaggi di soluzioni proprietarie. Se riesce, ogni tool costruito per un host funzionerà con tutti gli altri — un moltiplicatore enorme per l'ecosistema AI.

Per approfondire

  • Scopri come MCP si integra nei sistemi agentici nella sezione Orchestrazione
  • Vedi come ChipsBot usa MCP per connettere bot specialisti nel caso studio
  • Combina MCP con RAG per dare ai tool accesso a conoscenza specifica