{
  "version": "1.0",
  "publisher": {
    "name": "Levita SEO",
    "url": "https://levitawp.com/levita-seo",
    "vendor": "Levita WP"
  },
  "modules": [
    {
      "id": "levita-seo:performance-audit",
      "name": "Performance Audit",
      "description": "Analizza le performance del sito (TTFB, dimensione pagina, immagini, CSS, JS, HTTP status) e restituisce uno score con raccomandazioni. Supporta profondita basic, standard e advanced.",
      "url": "/wp-json/levita-seo/v1/performance/run",
      "method": "POST",
      "capabilities": [
        {
          "name": "run_audit",
          "description": "Esegue l'audit su un URL specifico e restituisce score + raccomandazioni",
          "parameters": {
            "type": "object",
            "properties": {
              "url": { "type": "string", "format": "uri", "description": "URL da analizzare (default: home_url)" },
              "depth": { "type": "string", "enum": ["basic", "standard", "advanced"], "description": "Profondita analisi" }
            },
            "required": []
          },
          "returns": {
            "type": "object",
            "properties": {
              "score": { "type": "integer", "minimum": 0, "maximum": 100 },
              "ttfb": { "type": "number", "description": "Time To First Byte in secondi" },
              "size_kb": { "type": "number", "description": "Dimensione HTML in KB" },
              "http_code": { "type": "integer" },
              "images": { "type": "integer" },
              "css_files": { "type": "integer" },
              "js_files": { "type": "integer" },
              "issues": { "type": "array", "items": { "type": "string" } },
              "good": { "type": "array", "items": { "type": "string" } }
            }
          }
        }
      ]
    },
    {
      "id": "levita-seo:image-optimization",
      "name": "Image Optimization",
      "description": "Ottimizza le immagini della libreria media (compressione JPEG/PNG, generazione WebP, ri-generazione ALT text via AI). Salta GIF (non beneficiabili) e file troppo grandi per il memory_limit.",
      "url": "/wp-json/levita-seo/v1/image/optimize-all",
      "method": "POST",
      "capabilities": [
        {
          "name": "optimize_all",
          "description": "Ottimizza TUTTE le immagini JPEG/PNG della libreria (compressione + WebP se abilitato). Le GIF vengono saltate per non corromperle.",
          "parameters": { "type": "object", "properties": {}, "required": [] },
          "returns": {
            "type": "object",
            "properties": {
              "success": { "type": "boolean" },
              "optimized": { "type": "integer" },
              "webp": { "type": "integer" }
            }
          }
        },
        {
          "name": "generate_webp",
          "description": "Genera versioni WebP per tutte le immagini JPEG/PNG della libreria. Preserva alpha channel per PNG trasparenti. Skippa se WebP esistente e piu recente del source.",
          "url": "/wp-json/levita-seo/v1/image/generate-webp",
          "method": "POST",
          "parameters": { "type": "object", "properties": {}, "required": [] },
          "returns": {
            "type": "object",
            "properties": {
              "success": { "type": "boolean" },
              "generated": { "type": "integer" },
              "skipped": { "type": "integer" },
              "failed": { "type": "integer" }
            }
          }
        },
        {
          "name": "regenerate_alt",
          "description": "Rigenera l'attributo ALT delle immagini. Strategia: (1) AI se abilitata, (2) titolo attachment se non filename-like, (3) filename pulito, (4) placeholder 'Immagine'.",
          "url": "/wp-json/levita-seo/v1/image/regenerate-alt",
          "method": "POST",
          "parameters": { "type": "object", "properties": {}, "required": [] },
          "returns": {
            "type": "object",
            "properties": {
              "success": { "type": "boolean" },
              "updated": { "type": "integer" },
              "skipped": { "type": "integer" },
              "ai_used": { "type": "integer" },
              "ai_failed": { "type": "integer" }
            }
          }
        }
      ]
    },
    {
      "id": "levita-seo:ai-content",
      "name": "AI Content Generation",
      "description": "Genera meta SEO (title, description), ALT text, e slug tramite AI (OpenAI, Claude, Gemini, Mistral, Ollama, Grok, DeepSeek, OpenRouter, Perplexity, LM Studio, Cohere). 11 provider supportati.",
      "url": "/wp-json/levita-seo/v1/ai/generate",
      "method": "POST",
      "capabilities": [
        {
          "name": "generate_meta",
          "description": "Genera title e description SEO per un post dato keyword e context",
          "parameters": {
            "type": "object",
            "properties": {
              "keyword": { "type": "string", "description": "Parola chiave target" },
              "context": { "type": "string", "description": "Contesto aggiuntivo (opzionale)" }
            },
            "required": ["keyword"]
          },
          "returns": {
            "type": "object",
            "properties": {
              "title": { "type": "string" },
              "description": { "type": "string" }
            }
          }
        },
        {
          "name": "list_providers",
          "description": "Elenca i provider AI configurati e disponibili",
          "url": "/wp-json/levita-seo/v1/ai/providers",
          "method": "GET",
          "parameters": { "type": "object", "properties": {}, "required": [] },
          "returns": {
            "type": "object",
            "properties": {
              "providers": { "type": "array", "items": { "type": "string" } },
              "active": { "type": "string" }
            }
          }
        }
      ]
    },
    {
      "id": "levita-seo:schema",
      "name": "Schema.org Markup",
      "description": "Gestisce il markup JSON-LD Schema.org per la homepage (WebSite + SearchAction), pagine singole (Article/Product/Event/Recipe/HowTo/JobPosting), taxonomy (CollectionPage), autore (ProfilePage), e Knowledge Graph dell'organizzazione (12 entity types: Organization, Person, LocalBusiness, Restaurant, Store, Portfolio, Service, EducationalOrganization, MedicalBusiness, TravelAgency, RealEstateAgent, NGO).",
      "url": "/wp-json/levita-seo/v1/schema/regenerate",
      "method": "POST",
      "capabilities": [
        {
          "name": "regenerate",
          "description": "Rigenera lo schema JSON-LD per un post specifico",
          "parameters": {
            "type": "object",
            "properties": {
              "post_id": { "type": "integer", "description": "ID del post" }
            },
            "required": ["post_id"]
          }
        },
        {
          "name": "get_knowledge_graph",
          "description": "Restituisce l'entity corrente del Knowledge Graph (Organization, Person, ecc.)",
          "url": "/wp-json/levita-seo/v1/schema/knowledge-graph",
          "method": "GET",
          "parameters": { "type": "object", "properties": {}, "required": [] },
          "returns": {
            "type": "object",
            "properties": {
              "type": { "type": "string" },
              "name": { "type": "string" },
              "url": { "type": "string" }
            }
          }
        }
      ]
    },
    {
      "id": "levita-seo:sitemap",
      "name": "XML Sitemap",
      "description": "Genera sitemap.xml con posts, pages, products (WooCommerce) e custom post types configurati. Filtra per noindex, nofollow, esclude pagine specifiche.",
      "url": "/sitemap.xml",
      "method": "GET",
      "capabilities": [
        {
          "name": "regenerate",
          "description": "Rigenera la sitemap",
          "url": "/wp-json/levita-seo/v1/sitemap/regenerate",
          "method": "POST",
          "parameters": { "type": "object", "properties": {}, "required": [] }
        }
      ]
    },
    {
      "id": "levita-seo:redirects",
      "name": "Redirects",
      "description": "Gestisce redirect 301/302/307 da URL vecchi a nuovi. Supporta regex, hit counter, bulk import/export.",
      "url": "/wp-json/levita-seo/v1/redirects",
      "method": "GET",
      "capabilities": [
        {
          "name": "list",
          "description": "Elenca tutti i redirect attivi",
          "parameters": { "type": "object", "properties": {}, "required": [] },
          "returns": {
            "type": "object",
            "properties": {
              "redirects": { "type": "array" }
            }
          }
        },
        {
          "name": "create",
          "description": "Crea un nuovo redirect",
          "parameters": {
            "type": "object",
            "properties": {
              "source": { "type": "string", "description": "URL sorgente (puo essere regex)" },
              "target": { "type": "string", "description": "URL destinazione" },
              "type": { "type": "integer", "enum": [301, 302, 307], "description": "Tipo redirect" }
            },
            "required": ["source", "target"]
          }
        }
      ]
    },
    {
      "id": "levita-seo:404-monitor",
      "name": "404 Monitor",
      "description": "Traccia le pagine 404 (non trovate) con hit counter. Suggerisce redirect automatici verso contenuti simili.",
      "url": "/wp-json/levita-seo/v1/404",
      "method": "GET",
      "capabilities": [
        {
          "name": "list",
          "description": "Elenca le pagine 404 con statistiche",
          "parameters": { "type": "object", "properties": {}, "required": [] }
        }
      ]
    },
    {
      "id": "levita-seo:broken-links",
      "name": "Broken Links Scanner",
      "description": "Scanner dei link rotti interni ed esterni nei contenuti. Identifica link 404, 500, redirect loop, timeout.",
      "url": "/wp-json/levita-seo/v1/broken-links",
      "method": "GET",
      "capabilities": [
        {
          "name": "scan",
          "description": "Esegue scansione dei link rotti in tutti i post",
          "parameters": { "type": "object", "properties": {}, "required": [] }
        }
      ]
    },
    {
      "id": "levita-seo:internal-linking",
      "name": "AI Internal Linking",
      "description": "Suggerisce link interni tra articoli basandosi su rilevanza semantica. Usa AI o keyword matching.",
      "url": "/wp-json/levita-seo/v1/internal-links",
      "method": "GET",
      "capabilities": [
        {
          "name": "suggest",
          "description": "Suggerisce link interni per un post specifico",
          "parameters": {
            "type": "object",
            "properties": {
              "post_id": { "type": "integer" }
            },
            "required": ["post_id"]
          }
        }
      ]
    },
    {
      "id": "levita-seo:license",
      "name": "License Manager",
      "description": "Gestisce la licenza PRO (Free/Pro/Business/Agency). Verifica la chiave con il server levitawp.com, applica grace period di 14 giorni se scaduta.",
      "url": "/wp-json/levita-seo/v1/license",
      "method": "GET",
      "capabilities": [
        {
          "name": "status",
          "description": "Restituisce lo stato corrente della licenza (attiva, scaduta, free, giorni rimanenti)",
          "url": "/wp-json/levita-seo/v1/license/status",
          "method": "GET",
          "parameters": { "type": "object", "properties": {}, "required": [] },
          "returns": {
            "type": "object",
            "properties": {
              "tier": { "type": "string", "enum": ["free", "pro", "business", "agency"] },
              "active": { "type": "boolean" },
              "days_remaining": { "type": "integer" }
            }
          }
        }
      ]
    },
    {
      "id": "levita-seo:robots-txt",
      "name": "robots.txt",
      "description": "Genera e gestisce robots.txt con regole per Google, Bing, AI agents (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, Amazonbot, CCBot). Blocca pagine noindex per scelta utente.",
      "url": "/robots.txt",
      "method": "GET",
      "capabilities": [
        {
          "name": "regenerate",
          "description": "Rigenera robots.txt",
          "url": "/wp-json/levita-seo/v1/robots-txt/regenerate",
          "method": "POST",
          "parameters": { "type": "object", "properties": {}, "required": [] }
        }
      ]
    },
    {
      "id": "levita-seo:llms-txt",
      "name": "llms.txt",
      "description": "Genera llms.txt (Markdown strutturato) per LLM training e discovery. Elenca i contenuti principali del sito con H1 obbligatorio secondo lo standard llmstxt.org.",
      "url": "/llms.txt",
      "method": "GET",
      "capabilities": [
        {
          "name": "regenerate",
          "description": "Rigenera llms.txt",
          "url": "/wp-json/levita-seo/v1/llms-txt/regenerate",
          "method": "POST",
          "parameters": { "type": "object", "properties": {}, "required": [] }
        }
      ]
    },
    {
      "id": "levita-seo:settings",
      "name": "Settings",
      "description": "Gestisce le impostazioni del plugin divise in 4 sezioni: Titoli & Meta (template title/description), Knowledge Graph (12 entity types), Schema Markup (toggle per tipo), Avanzate (Performance, Security, Debug, Modules).",
      "url": "/wp-admin/admin.php?page=levita-seo-settings",
      "method": "GET",
      "capabilities": [
        {
          "name": "list_sections",
          "description": "Elenca le 4 sezioni di impostazioni (titles, kg, schema, advanced)",
          "url": "/wp-json/levita-seo/v1/settings/sections",
          "method": "GET",
          "parameters": { "type": "object", "properties": {}, "required": [] }
        }
      ]
    }
  ],
  "endpoints": {
    "manifest": "/.well-known/webmcp.json",
    "tools": "/wp-json/levita-seo/v1/mcp/tools",
    "tool_call": "/wp-json/levita-seo/v1/mcp/tools/call"
  },
  "schema_version": "1.0",
  "last_updated": "2026-06-25"
}
