API e MCP di ProjetLab
ProjetLab pubblica un'API REST in sola lettura e un server MCP con gli stessi contenuti del sito: dati dello studio, servizi, portfolio progetti e articoli del blog. Servono ad agent e integrazioni che devono rispondere su uno studio di architettura nell'area di Napoli, Boscoreale e Torre Annunziata.
Autenticazione
Nessuna. Tutti gli endpoint sono pubblici, in sola lettura (GET) e con CORS aperto. Base URL: https://projetlab.it. Specifica completa: openapi.json (OpenAPI 3.1), catalogo /.well-known/api-catalog (RFC 9727).
Endpoint
| Metodo | Percorso | operationId | Contenuto |
|---|---|---|---|
| GET | /api/v1/info | getStudioInfo | Dati dello studio: indirizzo, telefoni, email, orari, zona servita |
| GET | /api/v1/services | listServices | Elenco dei servizi |
| GET | /api/v1/services/{slug} | getService | Dettaglio di un servizio |
| GET | /api/v1/projects?category= | listProjects | Portfolio progetti (category: residenziali, infrastrutture, retail) |
| GET | /api/v1/projects/{id} | getProject | Dettaglio di un progetto |
| GET | /api/v1/posts | listPosts | Articoli del blog |
| GET | /api/v1/posts/{slug} | getPost | Articolo completo in markdown |
Esempi
curl -s https://projetlab.it/api/v1/info
curl -s https://projetlab.it/api/v1/projects?category=residenziali
curl -s https://projetlab.it/api/v1/posts/bonus-ristrutturazione-2026-campaniaLimiti di utilizzo
60 richieste al minuto per IP. Ogni risposta riporta gli header IETF RateLimit-Policy (es. "default";q=60;w=60) e RateLimit (richieste residue e secondi al reset). Oltre il limite la risposta è 429 con Retry-After.
Errori
Gli errori sotto /api/ sono in application/problem+json (RFC 9457) con i campi type, title, status, detail, code e resolution. Codici: not_found, service_not_found, project_not_found, post_not_found, invalid_id, invalid_category, method_not_allowed, rate_limited.
{
"type": "https://projetlab.it/docs#errori",
"title": "Progetto non trovato",
"status": 404,
"detail": "Nessun progetto con id 9999.",
"code": "project_not_found",
"resolution": "Elenca gli ID validi con GET /api/v1/projects."
}Server MCP
Endpoint Streamable HTTP (JSON-RPC 2.0, senza sessione): POST https://projetlab.it/mcp. Server card: /.well-known/mcp/server-card.json, manifest per il registry: /server.json. Tool in sola lettura:
get_studio_info: Contatti, indirizzo e orarilist_services / get_service: Servizi dello studiolist_projects / get_project: Portfolio progettilist_blog_posts / get_blog_post: Articoli del blog
Risorse: projetlab://studio, projetlab://services, projetlab://projects e un articolo per risorsa su projetlab://blog/{slug}.
curl -s https://projetlab.it/mcp -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_studio_info","arguments":{}}}'Pagine in markdown
Ogni pagina del sito risponde in markdown se richiesta con Accept: text/markdown. Le risposte HTML e markdown dichiarano Vary: Accept. Guida per agent: llms.txt.
curl -s -H 'Accept: text/markdown' https://projetlab.it/chi-siamoContatti
Per segnalazioni sull'API scrivi a info@projetlab.it. Preventivi e sopralluoghi passano solo dalla pagina Contatti.