Home

API e MCP

simoneruggiero.com espone un'API pubblica in sola lettura con gli stessi dati del sito: profilo, app iOS e macOS, progetti web, articoli del blog e AI thoughts. Gli stessi dati sono disponibili come tool di un server MCP.

Autenticazione

Nessuna. Tutti gli endpoint sono pubblici, accettano solo GET (e HEAD) e non modificano nulla. CORS è aperto (Access-Control-Allow-Origin: *).

Endpoint

Metodo Path Descrizione
GET /api/v1/info Profilo: nome, ruolo, località, email, link social, competenze
GET /api/v1/apps App iOS e macOS con link allo store
GET /api/v1/projects Progetti web realizzati
GET /api/v1/posts?collection=blog Elenco articoli (blog o ai-thoughts)
GET /api/v1/posts/{collection}/{slug} Un articolo con il contenuto in Markdown

Esempi

curl -s https://simoneruggiero.com/api/v1/info
curl -s https://simoneruggiero.com/api/v1/apps | jq '.apps[] | {title, storeUrl}'
curl -s "https://simoneruggiero.com/api/v1/posts?collection=ai-thoughts" | jq '.posts[0]'

Non esiste un pacchetto CLI dedicato: curl e jq bastano per tutti gli endpoint.

Rate limit

60 richieste al minuto per indirizzo IP, condivise tra API e MCP. Ogni risposta include gli header IETF:

RateLimit-Policy: "default";q=60;w=60
RateLimit: "default";r=59;t=60

r è una stima delle richieste rimaste nella finestra, t i secondi al reset. Oltre il limite la risposta è 429 con header Retry-After.

Errori

Gli errori sono in formato application/problem+json (RFC 9457):

{
  "type": "https://simoneruggiero.com/docs#errori",
  "title": "Not Found",
  "status": 404,
  "detail": "No API endpoint at /api/v1/unknown.",
  "code": "not_found",
  "resolution": "See https://simoneruggiero.com/openapi.json for the available endpoints."
}

Codici: not_found (404), method_not_allowed (405), invalid_parameter (400), rate_limited (429).

Server MCP

Endpoint https://simoneruggiero.com/mcp, trasporto Streamable HTTP (JSON-RPC 2.0 via POST), senza autenticazione. Tool disponibili, tutti in sola lettura: get_profile, list_apps, list_projects, list_posts, get_post. Risorse: simoneruggiero://profile, simoneruggiero://apps, simoneruggiero://projects.

Configurazione per un client MCP:

{
  "mcpServers": {
    "simoneruggiero": { "type": "http", "url": "https://simoneruggiero.com/mcp" }
  }
}

Prova rapida:

curl -s https://simoneruggiero.com/mcp -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Manifest: /server.json e /.well-known/mcp/server-card.json.

Markdown per gli agenti

Le pagine principali (home, app, blog, articoli, chi sono, contatti, privacy e questa pagina) rispondono in Markdown se la richiesta contiene Accept: text/markdown:

curl -s https://simoneruggiero.com/ -H 'Accept: text/markdown'

Versioni

L'API è alla versione v1. Eventuali modifiche incompatibili arriveranno su un nuovo prefisso (/api/v2), lasciando attivo v1.