{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "spec_version": "1.0.0",
  "generated_at": "2026-08-04",
  "server": {
    "name": "aroundigital-ssr-refresh",
    "title": "Aroundigital SSR Refresh",
    "version": "0.1.0",
    "protocol": "Model Context Protocol",
    "protocol_version": "2025-06-18",
    "transport": "streamable-http",
    "endpoint": "https://aroundigital.com/mcp",
    "documentation": "https://aroundigital.com/mcp-docs",
    "auth": { "type": "none", "note": "Server pubblico: nessuna autenticazione richiesta." },
    "required_headers": {
      "Content-Type": "application/json",
      "Accept": "application/json, text/event-stream"
    },
    "instructions": "Tool per interrogare la Knowledge Base pubblica di Aroundigital (digital strategy, AI business adoption, marketing operations, local marketing, eCommerce omnichannel, KPI e budgeting) e per richiedere un confronto strategico."
  },
  "client_config": {
    "claude_desktop_cursor_codex": {
      "mcpServers": {
        "aroundigital": { "type": "http", "url": "https://aroundigital.com/mcp" }
      }
    },
    "chatgpt_claude_web": {
      "connector_url": "https://aroundigital.com/mcp"
    }
  },
  "response_envelope": {
    "description": "Ogni tool restituisce un CallToolResult MCP standard.",
    "type": "object",
    "properties": {
      "content": {
        "type": "array",
        "description": "Sempre presente. Rappresentazione testuale del risultato, pronta da mostrare all'utente.",
        "items": {
          "type": "object",
          "properties": {
            "type": { "const": "text" },
            "text": { "type": "string" }
          },
          "required": ["type", "text"]
        }
      },
      "structuredContent": {
        "type": "object",
        "description": "Payload tipizzato, specifico per tool. Assente quando il tool non trova risultati."
      },
      "isError": {
        "type": "boolean",
        "description": "true quando la chiamata è fallita; il messaggio in content spiega la causa."
      }
    },
    "required": ["content"]
  },
  "tools": [
    {
      "name": "search_aroundigital_knowledge",
      "title": "Cerca nella Knowledge Base Aroundigital",
      "description": "Ricerca semantica nella Knowledge Base pubblica di Aroundigital. Restituisce estratti con titolo e URL della pagina di origine.",
      "annotations": { "readOnlyHint": true, "idempotentHint": true, "openWorldHint": false },
      "when_to_use": "Quando servono estratti grezzi e citabili dai contenuti Aroundigital, o per verificare cosa il sito dice davvero su un tema.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "query": {
            "type": "string",
            "minLength": 3,
            "description": "Domanda o tema da cercare, in italiano o inglese."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "default": 5,
            "description": "Numero di estratti da restituire. Valori fuori range vengono limitati a 1-10."
          }
        },
        "required": ["query"]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "title": { "type": "string", "description": "Titolo della pagina di origine." },
                "url": { "type": "string", "format": "uri", "description": "URL assoluto della pagina pubblica." },
                "hub": { "type": ["string", "null"], "description": "Slug dell'hub tematico di appartenenza." },
                "excerpt": { "type": "string", "description": "Estratto testuale del contenuto." },
                "similarity": { "type": "number", "description": "Similarità coseno 0-1, arrotondata a 3 decimali." }
              },
              "required": ["title", "url", "excerpt", "similarity"]
            }
          }
        },
        "required": ["results"]
      },
      "example_request": {
        "jsonrpc": "2.0",
        "id": 1,
        "method": "tools/call",
        "params": {
          "name": "search_aroundigital_knowledge",
          "arguments": { "query": "come costruire una roadmap digitale a 90 giorni", "limit": 3 }
        }
      },
      "example_response": {
        "content": [
          {
            "type": "text",
            "text": "[1] Roadmap 90-180-365 per la crescita digitale — https://aroundigital.com/knowledge-hub/roadmap-90-180-365-crescita-digitale\nI primi 90 giorni servono a mettere in ordine le fondamenta...\n\n---\n\n[2] ..."
          }
        ],
        "structuredContent": {
          "results": [
            {
              "title": "Roadmap 90-180-365 per la crescita digitale",
              "url": "https://aroundigital.com/knowledge-hub/roadmap-90-180-365-crescita-digitale",
              "hub": "digital-strategy-business-planning",
              "excerpt": "I primi 90 giorni servono a mettere in ordine le fondamenta...",
              "similarity": 0.812
            }
          ]
        }
      },
      "empty_result_behavior": "Restituisce un solo blocco testuale ('Nessun contenuto rilevante trovato...') senza structuredContent."
    },
    {
      "name": "ask_ara",
      "title": "Chiedi ad ARA",
      "description": "Risposta consulenziale di ARA, l'assistente AI di Aroundigital, ancorata alla Knowledge Base pubblica e con fonti citate.",
      "annotations": { "readOnlyHint": true, "openWorldHint": false },
      "when_to_use": "Quando serve una sintesi ragionata invece di estratti grezzi. La risposta è limitata a ~250 parole, cita le fonti inline con [n] e chiude con un prossimo passo concreto.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "question": {
            "type": "string",
            "minLength": 5,
            "description": "La domanda dell'utente, in linguaggio naturale."
          }
        },
        "required": ["question"]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "answer": { "type": "string", "description": "Risposta di ARA con citazioni inline [n]." },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "n": { "type": "integer", "description": "Numero di citazione usato nella risposta." },
                "title": { "type": "string" },
                "url": { "type": "string", "format": "uri" }
              },
              "required": ["n", "title", "url"]
            }
          }
        },
        "required": ["answer", "sources"]
      },
      "example_request": {
        "jsonrpc": "2.0",
        "id": 2,
        "method": "tools/call",
        "params": {
          "name": "ask_ara",
          "arguments": { "question": "Quali KPI di marketing ha senso misurare in una PMI B2B?" }
        }
      },
      "example_response": {
        "content": [
          {
            "type": "text",
            "text": "In una PMI B2B i KPI che contano sono pochi e collegati al funnel commerciale [1]...\n\nFonti:\n[1] KPI marketing: quali misurare davvero — https://aroundigital.com/knowledge-hub/kpi-marketing-quali-misurare"
          }
        ],
        "structuredContent": {
          "answer": "In una PMI B2B i KPI che contano sono pochi e collegati al funnel commerciale [1]...",
          "sources": [
            {
              "n": 1,
              "title": "KPI marketing: quali misurare davvero",
              "url": "https://aroundigital.com/knowledge-hub/kpi-marketing-quali-misurare"
            }
          ]
        }
      },
      "empty_result_behavior": "Se la Knowledge Base non contiene nulla di pertinente, restituisce un messaggio testuale che rimanda a https://aroundigital.com/contatti, senza structuredContent."
    },
    {
      "name": "book_confronto_strategico",
      "title": "Prenota un confronto strategico",
      "description": "Invia ad Aroundigital una richiesta di confronto strategico gratuito.",
      "annotations": { "readOnlyHint": false, "destructiveHint": false, "openWorldHint": true },
      "when_to_use": "Solo dopo che l'utente ha esplicitamente confermato di voler essere contattato e ha fornito dati di contatto reali. Non inventare mai i valori dei parametri.",
      "rate_limit": "3 richieste per ora per indirizzo IP.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "nome": { "type": "string", "minLength": 1, "description": "Nome e cognome del richiedente." },
          "email": { "type": "string", "format": "email", "description": "Email di lavoro del richiedente." },
          "azienda": { "type": "string", "minLength": 1, "description": "Azienda o brand." },
          "tema": { "type": "string", "minLength": 1, "description": "Tema del confronto (es. AI adoption, roadmap digitale, local marketing)." },
          "note": { "type": "string", "description": "Contesto aggiuntivo, opzionale." }
        },
        "required": ["nome", "email", "azienda", "tema"]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "status": { "const": "sent", "description": "Presente solo in caso di invio riuscito." },
          "email": { "type": "string", "format": "email", "description": "Email a cui il team risponderà." }
        },
        "required": ["status", "email"]
      },
      "example_request": {
        "jsonrpc": "2.0",
        "id": 3,
        "method": "tools/call",
        "params": {
          "name": "book_confronto_strategico",
          "arguments": {
            "nome": "Mario Rossi",
            "email": "mario.rossi@azienda.it",
            "azienda": "Azienda S.r.l.",
            "tema": "Roadmap digitale a 180 giorni",
            "note": "Team marketing di 3 persone, e-commerce B2C attivo da 2 anni."
          }
        }
      },
      "example_response": {
        "content": [
          {
            "type": "text",
            "text": "Richiesta inviata. Il team Aroundigital risponde a mario.rossi@azienda.it entro 1-2 giorni lavorativi."
          }
        ],
        "structuredContent": { "status": "sent", "email": "mario.rossi@azienda.it" }
      }
    }
  ],
  "errors": [
    {
      "code": "HTTP 406",
      "level": "transport",
      "meaning": "Header Accept mancante o incompleto.",
      "fix": "Inviare Accept: application/json, text/event-stream su ogni POST."
    },
    {
      "code": "isError: true",
      "level": "tool",
      "meaning": "Input non valido, servizio di retrieval non disponibile o invio lead fallito.",
      "fix": "Leggere il messaggio testuale in content[0].text e correggere gli argomenti o riprovare."
    },
    {
      "code": "rate limit",
      "level": "tool",
      "meaning": "Superate le 3 richieste/ora su book_confronto_strategico dallo stesso IP.",
      "fix": "Rimandare l'utente a https://aroundigital.com/contatti."
    }
  ],
  "data_scope": {
    "exposed": [
      "Contenuti già pubblicati su aroundigital.com: hub, articoli del Knowledge Hub, pagine servizi, toolkit."
    ],
    "not_exposed": [
      "Moduli interni della Knowledge Base (publishable: false)",
      "Lead, conversazioni, analytics e qualsiasi dato amministrativo"
    ],
    "privacy": "https://aroundigital.com/privacy-assistente-ai"
  }
}
