agid-llm-ui MCP Server
Provides tools to generate Italian PA UI components based on the Bootstrap Italia design system, including markup, accessibility rules, and validation for AI-assisted development.
Generates typed React wrappers for the Web Components, enabling seamless integration of AgID-compliant UI components in React applications.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@agid-llm-ui MCP Server crea un form di contatto con input email e telefono"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
agid-llm-ui — un design system LLM-first per la PA italiana
LLM-first: un esperimento per aiutare gli assistenti AI (Claude, Cursor, Copilot…) a generare interfacce della PA più vicine alle linee guida di design AgID, cercando di tenere conto dell'accessibilità. I componenti e i materiali per gli LLM sono generati da un'unica fonte machine-readable.
LLM-first — an experiment to help AI assistants generate Italian-PA UIs closer to the AgID design guidelines. Components and LLM-facing materials are generated from a single machine-readable spec.
🔗 Galleria + demo (GitHub Pages): https://andreaderuvo.github.io/agid-llm-ui/ · home di un Comune generata col design system
Da dove nasce
Il punto di partenza sono alcune caratteristiche di Bootstrap Italia (il design system ufficiale della PA), osservate senza pretese:
il design e l'accessibilità sono ottimi, ma il markup è verboso e molte regole stanno nella documentazione, non nei componenti;
i vari kit di framework (React, Angular, web components) sono mantenuti a mano, senza un'unica fonte machine-readable, quindi tendono a rincorrere;
gli assistenti AI non conoscono Bootstrap Italia e spesso generano markup generico e non conforme.
Questo progetto è un esperimento per provare un approccio diverso: descrivere i componenti in una spec machine-readable e generare da lì gli artefatti — inclusi quelli che aiutano un LLM a produrre UI più conformi. Non pretende di essere completo né una soluzione definitiva: è un punto di partenza aperto ai contributi.
Come funziona, in breve: da sota/spec/ un piccolo codegen produce i Web Components (con l'accessibilità e il comportamento — focus, tastiera, stato — gestiti da macchine a stati Zag.js), i wrapper tipizzati, il CSS dai token, la documentazione, i contratti di validazione, la galleria e i dati per il server MCP. Cambiando la spec, gli artefatti si riallineano.
Note più estese: VISION.md.
⚠️ Progetto community, non ufficiale. Non affiliato né approvato da AgID o Designers Italia. Costruito sopra Bootstrap Italia (licenza BSD-3-Clause) nel rispetto della relativa attribuzione. "AgID" è usato solo in senso descrittivo; il prefisso
it-è provvisorio.
🤖 Realizzato in gran parte in vibe coding, insieme a un assistente AI — coerente con lo spirito LLM-first del progetto. Da leggere e verificare con spirito critico, non come codice "pronto per la produzione".
Related MCP server: Filo
Perché è più integrabile con gli LLM dei kit AgID originali
I kit ufficiali (Bootstrap Italia, design-react-kit…) sono pensati per sviluppatori umani. Rispetto a quelli, qui l'LLM parte avvantaggiato per ragioni concrete:
La conoscenza arriva all'LLM in forma machine-readable. MCP,
llms.txte i contratti mettono componenti e regole nel contesto del modello. I kit originali hanno solo documentazione per umani: l'LLM deve "ricordarsela" e spesso sbaglia.Molto meno boilerplate.
<it-dialog>è un tag; l'equivalente in Bootstrap Italia sono ~20 righe didivannidati con classi. Meno token da generare = meno errori.Accessibilità incapsulata (corretta per costruzione). L'LLM non può "dimenticare" gli ARIA/focus/tastiera: li fornisce il componente (macchine Zag). Col markup grezzo l'a11y è convenzione, e i modelli la perdono.
Un solo tag, tutti i framework.
<it-…>funziona in React/Vue/Angular/HTML: l'LLM non deve scegliere fra react-kit, angular-kit o vanilla.Loop di verifica.
validate_snippetfa autocorreggere l'LLM contro il design system — non esiste nei kit originali.
In una riga: i kit originali si possono usare con un LLM, ma glielo devi spiegare ogni volta; qui la spiegazione è integrata e verificabile.
Per chi sviluppa — cosa devi fare, in pratica
Scegli lo scenario che ti riguarda.
A) Voglio che l'AI mi generi UI conformi (Cursor, Claude, VS Code…)
Builda una volta:
git clone https://github.com/andreaderuvo/agid-llm-ui.git cd agid-llm-ui && npm install && npm run buildCollega il server MCP al tuo editor → vedi Usare il server MCP.
Chiedi in italiano, es. «pagina di un servizio comunale conforme ad AgID con un form e una tabella». L'assistente usa i tool e genera markup conforme, preferendo i tag
<it-…>.
B) Voglio solo i componenti nel mio sito/app (anche senza AI)
I componenti sono Web Components: HTML puro, funzionano in React, Vue, Angular o HTML.
npm install && npm run build && node sota/codegen.mjs
# poi prendi da sota/dist/ : it-tokens.css, it-components.js, it-behavioral.bundle.jsNella tua pagina:
<link rel="stylesheet" href="it-tokens.css">
<script defer src="it-components.js"></script>
<script defer src="it-behavioral.bundle.js"></script>
<it-button variant="success">Invia</it-button>
<it-dialog trigger="Apri" title="Conferma">Vuoi procedere?</it-dialog>
<it-datatable page-size="10" searchable> …una <table> nativa… </it-datatable>ℹ️ Pubblicazione su npm/CDN: prevista, non ancora fatta. Per ora si builda in locale e si prendono i file da
sota/dist/.
C) Uso OpenAI o un altro strumento
Se parla MCP (OpenAI Agents SDK / Responses API, VS Code Copilot…): fai come in A.
Altrimenti: usa i componenti come in B e passa
sota/dist/llms.txtcome contesto all'LLM.
Non sai da dove partire? Apri la galleria
sota/dist/index.html: per ogni componente trovi anteprima dal vivo, props e codice da copiare.
Cosa contiene
49 componenti verificati (render + accessibilità), ~20 interattivi su Zag (dialog, menu, select, combobox, datepicker, tabs, toast, steps, slider, datatable…) + presentazionali (card, table, header, footer, breadcrumb…).
Server MCP con 9 tool — serve sia il markup Bootstrap Italia grezzo (v1) sia i Web Components AI-first (v2):
Tool | A cosa serve |
| Componenti Bootstrap Italia (markup + a11y) |
| Ricette di pagina dei modelli PA |
| Regole WCAG 2.1 AA / AgID |
| Componenti AI-first universali (consigliati) |
| Valida uno snippet e suggerisce i tag conformi (loop di autocorrezione) |
Architettura: una fonte → tutti gli artefatti
sota/spec/ (design token DTCG + manifest dei componenti = fonte unica)
│ node sota/codegen.mjs
├─ Web Components (a11y incapsulata, Zag dentro)
├─ wrapper React tipizzati
├─ CSS dai token
├─ llms.txt (doc per LLM)
├─ contracts.json (validazione → MCP)
├─ galleria (GitHub Pages)
└─ dati per il server MCPDettagli: VISION.md.
Installazione
git clone https://github.com/andreaderuvo/agid-llm-ui.git
cd agid-llm-ui
npm install
npm run build # compila il server MCP
node sota/codegen.mjs # genera componenti, galleria, llms.txt, contrattiUsare il server MCP
MCP è uno standard aperto: questo server funziona con qualsiasi client compatibile — Claude (Desktop/Code), Cursor, VS Code (GitHub Copilot agent), Windsurf, Cline, Zed, JetBrains AI… Non è legato a un solo editor.
Provalo con l'Inspector:
npm run inspectClaude Code:
claude mcp add agid-llm-ui -- node /percorso/assoluto/agid-llm-ui/dist/index.jsCursor / Claude Desktop / altri client — aggiungi al file di configurazione MCP:
{
"mcpServers": {
"agid-llm-ui": {
"command": "node",
"args": ["/percorso/assoluto/agid-llm-ui/dist/index.js"]
}
}
}Poi, nell'editor: «Crea una pagina di un servizio comunale conforme ad AgID» → l'assistente usa i tool e genera markup conforme, preferendo i Web Components.
Galleria in locale: apri sota/dist/index.html (o servila con un web server statico).
Contribuire
Aggiungere un componente presentazionale = un file spec (sota/spec/components/*.json). Uno interattivo = una macchina Zag + un piccolo Web Component. Vedi CONTRIBUTING.md.
Roadmap
Catalogo Bootstrap Italia (~50 componenti)
validate_snippet(loop di conformità)llms.txtgenerato dalla specGalleria + demo (mini-sito comunale) su GitHub Pages
Selettore lingua IT/EN (i18n) e color theming live
Demo PWA (installabile / offline)
Componenti mancanti: input-ora, transfer, cookiebar, video-player
Rules pack (
.cursor/rules,AGENTS.md) +registry.json(shadcn)Adapter Vue / Angular / Svelte generati dalla spec
render_check(screenshot headless → verifica visiva) nel loop MCPSubmission al catalogo Developers Italia
Riferimenti
Bootstrap Italia · Designers Italia · Zag.js · Model Context Protocol
Licenza
EUPL-1.2 — la licenza raccomandata per il software della PA europea.
Available Tools
9 toolsget_accessibility_rulesRegole di accessibilità (WCAG 2.1 AA / AgID)A
Restituisce le regole di accessibilità trasversali da rispettare in ogni interfaccia PA. Consulta questo tool prima di consegnare una UI. Design system: Bootstrap Italia (2.x). Genera SEMPRE markup con le classi di Bootstrap Italia e rispetta le note di accessibilità. Non sostituire con Bootstrap generico, Tailwind o markup non conforme.
Inputs: topic.
get_component_codeOttieni il codice di un componenteA
Restituisce il markup conforme e le note di accessibilità di un componente Bootstrap Italia dato il suo id. Design system: Bootstrap Italia (2.x). Genera SEMPRE markup con le classi di Bootstrap Italia e rispetta le note di accessibilità. Non sostituire con Bootstrap generico, Tailwind o markup non conforme.
Inputs: id (required).
get_page_recipeOttieni una ricetta di paginaA
Restituisce lo scheletro completo e conforme di una pagina PA (es. pagina di un servizio comunale), componendo header, breadcrumb, contenuto e footer con i link obbligatori. Design system: Bootstrap Italia (2.x). Genera SEMPRE markup con le classi di Bootstrap Italia e rispetta le note di accessibilità. Non sostituire con Bootstrap generico, Tailwind o markup non conforme.
Inputs: id (required).
get_webcomponentOttieni un componente AI-first (Web Component)A
Restituisce l'uso e il contratto di accessibilità di un Web Component universale dato il suo tag. Componenti AI-first: Web Components universali (funzionano in React, Vue, Angular, HTML puro). L'accessibilità è già incapsulata: preferisci SEMPRE questi tag ai markup grezzi quando il progetto può caricarli.
Inputs: tag (required).
list_componentsElenca i componenti disponibiliA
Elenca i componenti Bootstrap Italia disponibili (id, nome, categoria). Usa questo tool per scoprire cosa esiste prima di generare una UI PA. Design system: Bootstrap Italia (2.x). Genera SEMPRE markup con le classi di Bootstrap Italia e rispetta le note di accessibilità. Non sostituire con Bootstrap generico, Tailwind o markup non conforme.
Inputs: category.
list_recipesElenca le ricette di paginaA
Elenca le ricette di pagina conformi ai modelli di sito PA (Comuni, Scuole, Sanità). Una ricetta compone più componenti in una pagina intera. Design system: Bootstrap Italia (2.x). Genera SEMPRE markup con le classi di Bootstrap Italia e rispetta le note di accessibilità. Non sostituire con Bootstrap generico, Tailwind o markup non conforme.
Inputs: no named parameters.
list_webcomponentsElenca i componenti AI-first (Web Components)A
Elenca i Web Components universali disponibili (tag e scopo). Sono la forma consigliata: un solo tag, accessibilità incapsulata, nessun lock-in di framework. Componenti AI-first: Web Components universali (funzionano in React, Vue, Angular, HTML puro). L'accessibilità è già incapsulata: preferisci SEMPRE questi tag ai markup grezzi quando il progetto può caricarli.
Inputs: no named parameters.
search_componentCerca un componenteA
Cerca un componente Bootstrap Italia per parola chiave (nome, descrizione, tag). Usa questo tool quando devi realizzare un elemento di UI e non conosci l'id esatto. Design system: Bootstrap Italia (2.x). Genera SEMPRE markup con le classi di Bootstrap Italia e rispetta le note di accessibilità. Non sostituire con Bootstrap generico, Tailwind o markup non conforme.
Inputs: query (required).
validate_snippetValida uno snippet HTML (loop di conformità)A
Controlla uno snippet HTML: pattern non-conformi (Tailwind / Bootstrap generico / handler inline), regole di accessibilità di base, e suggerisce i Web Components AI-first equivalenti. Chiama questo tool DOPO aver generato markup, per autocorreggerti.
Inputs: snippet (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 9 tools
Most tools are clearly distinct: list_webcomponents vs list_components target different systems, and search_component/get_component_code, list_recipes/get_page_recipe form clear pairs for the Bootstrap Italia side. However, list_webcomponents and get_webcomponent, and search_component vs list_components, have some overlap in purpose that could cause minor misselection (e.g., when to use list vs search).
Tool names follow a mostly consistent verb_noun pattern (list_*, get_*, search_*, validate_). Minor deviations exist where list_webcomponents and list_components both serve listing roles but across different systems, and web components use 'list_webcomponents'/'get_webcomponent' (singular/plural inconsistency) vs the Bootstrap Italia 'list_components'/'get_component_code' pattern.
Nine tools is a well-scoped count for a design-system UI generation server. Each tool fills a distinct role: listing/discovering components, retrieving component code, recipes/pages, accessibility rules, and validation. No redundancy or bloat.
The tool surface covers discovery, retrieval, page composition, accessibility rules, and validation—a complete UI-generation workflow with no dead ends. Minor gaps exist, such as no tool to combine/assemble multiple snippets into a larger page, but the recipe tools partially cover this.
Maintenance
Related MCP Connectors
The official MCP Server from Mia-Platform to interact with Mia-Platform Console
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server that lets your AI assistant build and deploy apps, hosting each one at a live URL.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA comprehensive template for building MCP servers that expose UI component registries and design systems to AI assistants. It enables users to browse, fetch, and retrieve implementation details from registries following the shadcn/ui format.182 npm2MIT
- AlicenseAqualityBmaintenanceAn unofficial MCP server that gives AI assistants structured access to Italy's Design System .italia, including components, design tokens, usage guidelines, and GitHub issues, updated nightly.1719 npm6BSD 3-Clause
- AlicenseAqualityDmaintenanceMCP server that provides UI5 Web Components documentation and integration guides for AI assistants.4544 npm20Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server for AI-powered component generation - analyze designs, generate components, and create implementation instructions.4 npm4MIT