Claude Artifacts MCP: una dashboard dei concorrenti in tempo reale che si aggiorna per ogni visitatore
Gli artifact pubblicati di Claude chiamano i connettori MCP con l'account di ciascun visitatore. Abbiamo testato 9 brand su TikTok, YouTube e Instagram e calcolato il costo di ogni apertura.

Nel luglio 2026 Claude ha dato agli artifact pubblicati una nuova capacità. Ogni volta che qualcuno apre la pagina, questa può chiamare i connettori MCP tramite le connessioni claude.ai del visitatore (Claude Code week 29 digest). È una soluzione adatta a una dashboard dei concorrenti che mostra dati aggiornati a chiunque la apra. Il 2026-11-05, dalle 00:18 alle 01:05 ora di Singapore, abbiamo recuperato i post recenti di 9 brand tramite il server MCP remoto di EveryInfra. Abbiamo effettuato 39 chiamate per i dati, 38 addebitate e 1 rimborsata, per un totale di $0,021128.
Tre brand (GoPro, Insta360 e DJI) alimentano la dashboard. Gli altri sei (Zara, Bershka, Mango, Garmin, Whoop e Oura) sono stati usati nel secondo round per mostrare più tipi di account. I dati sulla latenza e la sezione sulle insidie nei dati si basano su questi.
Lato Claude, l'intero articolo è un esempio di configurazione. Abbiamo scritto il codice della pagina della dashboard e vi abbiamo riprodotto le risposte reali sulla nostra macchina. Non l'abbiamo pubblicata su claude.ai.
La scoperta più utile riguarda l'annotazione del nostro tool. Il tool per i dati di EveryInfra everyinfra_call_api attualmente dichiara readOnlyHint: false e destructiveHint: true. Questa è l'annotazione attuale del nostro tool, non una regola della piattaforma Claude per i tool di dati.
Ecco la conseguenza pratica. Il runtime delle pagine di Claude non memorizza in cache i risultati di questo tool. La pagina inoltre non può chiamarlo con il metodo watch di aggiornamento automatico. Quindi la pagina deve gestire una propria cache.
Una pagina senza una propria cache paga quindi a ogni apertura. Con 10 persone che la aprono 3 volte al giorno, sono 900 aperture, 8.100 chiamate addebitate e $4,50 al mese. Salvando i risultati nello storage condiviso dell'artifact e aggiornandoli ogni 6 ore, lo stesso utilizzo costa $0,60 al mese.
La spesa è contenuta. I costi reali sono i tempi di attesa e il limite al minuto. La nostra chiamata sincrona più lenta ha richiesto 69 secondi. E una chiave condivisa riceve 90 chiamate in un minuto quando 10 persone aprono la pagina prima di uno stand-up.

Cosa significa claude artifacts mcp: la pagina recupera i dati quando si apre
Un artifact è qualcosa che Claude crea e che puoi mostrare ad altre persone: documenti, presentazioni, design, dashboard e piccoli strumenti. Il Centro assistenza dice che puoi condividerlo, salvarci dati e collegarlo alle tue app (What are artifacts?, consultato il 2026-11-05). Gli artifact creati prima del 2026-09-16 ora sono «legacy artifacts». Questo articolo riguarda la parte «connect your apps». Quando la pagina si apre, chiama un tool su un server MCP tramite un connettore di claude.ai e mostra il risultato.
La documentazione di Claude Code è la più dettagliata (Artifacts, consultato il 2026-11-05). Una pagina pubblicata può chiamare i connettori MCP ogni volta che qualcuno la visualizza. Così la pagina mostra dati attuali, non un'istantanea della sessione in cui è stata creata. La pagina recupera i dati al caricamento. Può anche aggiornarli a intervalli regolari o quando un visitatore usa un controllo di aggiornamento. Le risposte vengono memorizzate nella cache del browser del visitatore, quindi una pagina riaperta mostra prima i dati in cache e poi li aggiorna.
Quando Claude pubblica la pagina, dichiara quali connettori la pagina può chiamare. La pagina non può chiamare nulla al di fuori di questa dichiarazione. Sono ammessi solo i connettori del tuo account claude.ai. I server locali definiti in .mcp.json in Claude Code possono fornire dati mentre Claude crea la pagina, ma la pagina pubblicata non può chiamarli.
Lato Claude Code, la funzionalità è arrivata nella settimana dal 13 al 17 luglio 2026 (dalla v2.1.207 alla v2.1.212). Il digest dice che una pagina può chiamare i connettori «ogni volta che qualcuno la visualizza» e che ogni chiamata passa per le connessioni del visitatore (week 29 digest). Gli artifact nelle chat di claude.ai avevano già ottenuto MCP e storage persistente il 2025-10-21 (Turn ideas into interactive AI-powered apps). La voce delle note di rilascio del 2026-09-16 dice che design, presentazioni e documenti ora funzionano in qualsiasi conversazione (release notes).
| Dato | Cosa dice la fonte | Fonte e data di consultazione |
|---|---|---|
| Piani che consentono chiamate ai connettori dagli artifact | Pro, Max, Ultra, Team, Enterprise, su web e desktop | support.claude.com 17153992, 2026-11-05 |
| Versione minima di Claude Code per pubblicare queste pagine | v2.1.209 | code.claude.com/docs/en/artifacts, 2026-11-05 |
| Di chi è la connessione usata da un visitatore | I suoi connettori; la pagina non vede mai le credenziali | code.claude.com/docs/en/artifacts, 2026-11-05 |
| Prima chiamata | Ogni visitatore dà l'approvazione prima della prima chiamata a un connettore | Stessa pagina |
| Tool che richiedono approvazione per ogni azione | Non disponibili per gli artifact | support.claude.com 17153992, 2026-11-05 |
| Storage della pagina | Fino a 20 MB per artifact, solo testo, personale e condiviso | support.claude.com 17153992, 2026-11-05 |
| Link pubblici | Centro assistenza: niente «Anyone with the link» per gli artifact collegati ad app. Documentazione di Claude Code: la condivisione pubblica è possibile, ma chi non ha effettuato l'accesso e gli esterni non vedono le sezioni live | support.claude.com 9547008 e code.claude.com, 2026-11-05 |
| Impostazione dell'organizzazione | «Enable artifact connectors» in Organization settings | code.claude.com e support.claude.com 16994751, 2026-11-05 |
Chi può usarlo: piani, app e impostazioni di amministrazione
La sezione del Centro assistenza «Connect your apps to an artifact» elenca Pro, Max, Ultra, Team ed Enterprise e indica come app Claude su web e desktop (support 17153992). La stessa pagina dice che gli artifact richiedono l'impostazione «Cloud code execution and file creation». Il piano Free non è nell'elenco.
I connettori personalizzati sono disponibili su tutti i piani, e il piano Free ne consente uno solo (Get started with custom connectors using remote MCP). Un account Free però non può creare un artifact che chiama connettori. Quindi questa dashboard richiede almeno un piano a pagamento.
I prezzi provengono dalla pagina dei prezzi di Claude, consultata il 2026-11-05 (claude.com/pricing). Pro costa $17 al mese con il piano annuale o $20 con quello mensile. Max parte da $100. Ultra costa $200.
Un posto Team standard costa $20 al mese con il piano annuale o $25 con quello mensile, mentre un posto premium costa $100 o $125. Enterprise costa $20 a posto più l'utilizzo alle tariffe API. Per un team di 10 persone con posti Team standard mensili, i posti costano $250 al mese. Rispetto a questa cifra, il costo dei dati indicato più avanti è molto basso.
Team ed Enterprise aggiungono due impostazioni. La prima attiva o disattiva gli artifact per l'organizzazione. La seconda controlla le chiamate ai connettori dagli artifact. La documentazione di Claude Code la colloca in Organization settings > Capabilities, alla voce «Enable artifact connectors» (Artifacts).
La stessa impostazione vale anche per le pagine create nelle chat di claude.ai. La guida per gli amministratori aggiunge un dettaglio facile da trascurare: gli amministratori non possono limitare le app che un artifact può raggiungere. L'utilizzo viene conteggiato nei limiti di ciascun utente (Artifacts admin guide for Team and Enterprise plans).
Di chi è la connessione usata dopo la pubblicazione
Questa è la regola più importante, e la fonte è chiara. Quando una pagina pubblicata chiama un connettore, la chiamata usa l'account della persona che visualizza la pagina, non quello di chi l'ha pubblicata. Due persone che aprono la stessa dashboard possono vedere dati diversi, perché i loro account hanno accesso a risorse diverse. La pagina non vede mai le credenziali di nessuno: è claude.ai a effettuare le chiamate per conto della pagina.
Ogni visitatore dà l'approvazione prima della prima chiamata della pagina a un connettore. Un visitatore che rifiuta, o che non ha collegato il connettore, vede comunque la pagina, ma senza le sezioni live (Artifacts, «How connector calls work for viewers», consultato il 2026-11-05). Il Centro assistenza dice lo stesso: ognuno collega le proprie app, anche su un artifact condiviso o pubblicato (support 17153992).

Per questa dashboard, «la connessione del visitatore» può significare due cose diverse, e nei due casi il costo e il limite di frequenza delle richieste ricadono su persone diverse. Nel primo caso, il connettore usa l'accesso OAuth. Ogni persona accede al proprio account EveryInfra quando aggiunge il connettore. Ogni chiamata della pagina viene quindi addebitata sul saldo di quella persona e conteggiata nel suo limite al minuto.
Nel secondo caso, il connettore usa un'unica chiave API condivisa. Un Owner di Team o Enterprise aggiunge il connettore e inserisce la chiave in un header della richiesta. Il Centro assistenza dice che in questo modo chiunque usi il connettore ottiene i permessi di quella chiave (support 11175166). Formalmente ognuno usa ancora «la propria connessione». In pratica, tutti i costi e tutte le chiamate ricadono su un solo account EveryInfra.
Due gruppi di persone non vedono dati live. Le regole sono nell'articolo del Centro assistenza sulla condivisione (Share artifacts, consultato il 2026-11-05). La condivisione tramite link con «Anyone with the link» non è disponibile per gli artifact che si collegano ad app o usano Claude. Per le persone esterne all'organizzazione che inviti, le parti che usano Claude o i connettori non funzionano. Puoi invitare fino a 50 persone esterne per artifact.
La documentazione di Claude Code dice che puoi condividere pubblicamente una pagina basata su connettori. Però le chiamate ai connettori non vengono eseguite per i visitatori che non hanno effettuato l'accesso a claude.ai o che sono esterni alla tua organizzazione. Le due fonti non concordano sui link pubblici, ma concordano sul risultato: le persone esterne non vedono dati live. Questo articolo segue la regola più restrittiva del Centro assistenza e condivide la dashboard solo all'interno dell'organizzazione.
Diversi thread recenti su Reddit ne parlano. Un utente ha creato con Claude Code una dashboard per il recruiting basata su un database e chiedeva come mostrarla ai manager senza licenza Claude. Una risposta spiega che la condivisione nell'organizzazione richiede un membro che abbia effettuato l'accesso e che le chiamate ai connettori non vengono eseguite su un link pubblico (thread su r/ClaudeCode). In un altro thread, la dashboard risultava vuota per tutti i colleghi (thread su r/ClaudeAI).
La causa era la stessa regola: ogni persona deve collegare e approvare tutti i connettori usati dalla pagina. Per questo conviene inserire in ogni sezione live una breve nota con il nome del connettore da collegare. La documentazione di Claude Code dà lo stesso consiglio.
Limiti di chiamata: cosa dicono le fonti e cosa non dicono
Il 2026-11-05 abbiamo letto le pagine sui connettori degli artifact su claude.com, support.claude.com, code.claude.com e docs.claude.com. Nessuna indica un valore come «chiamate al minuto» o «chiamate al giorno» per le chiamate ai connettori dagli artifact. La guida per gli amministratori dice solo che l'utilizzo degli artifact viene conteggiato nei limiti di ciascun utente. Le definizioni dei tipi del runtime incluse nella nostra installazione locale di Claude Code contengono un codice di errore rate_limited, con la nota «reserved, never returned today».
La risposta onesta, quindi, è questa: Claude non pubblica un tetto alle chiamate per queste pagine. I limiti che possono bloccarti sono quelli documentati qui sotto e il limite di frequenza delle richieste del server del connettore stesso.
| Limite | Valore | Fonte | Effetto sulla dashboard |
|---|---|---|---|
| Dimensione del risultato di un tool su claude.ai e desktop | Circa 150.000 caratteri | claude.com/docs/connectors/building, 2026-11-05 | 20 post di TikTok occupano circa 50.000 byte |
| Timeout di una chiamata a un tool su claude.ai e desktop | 240 secondi | Stessa pagina | La nostra chiamata sincrona più lenta ha richiesto 69 secondi |
| Tempo massimo di attesa della risposta nel runtime della pagina | Circa 130 secondi | Definizioni dei tipi del runtime nella nostra installazione locale di Claude Code 2.1.309, versione 0.2.96 (non è documentazione pubblica, può cambiare) | Le piattaforme lente richiedono modalità asincrona e polling |
| Storage degli artifact | 20 MB ciascuno, solo testo | support.claude.com 17153992 | Salva solo i campi essenziali |
| Inviti esterni | Fino a 50 per artifact, senza sezioni live per loro | support.claude.com 9547008 | Condividi all'interno dell'organizzazione |
| Limite al minuto di EveryInfra | 60 per account per impostazione predefinita, sommando tutte le chiavi | everyinfra.com/pricing, 2026-11-05 | Una chiave condivisa dà al team 60 chiamate al minuto |
| Limite per chiave di EveryInfra | Una chiave può avere un limite inferiore; la nostra chiave di test ne aveva 10 al minuto | Risposta 429 alle 00:19:51 ora di Singapore, 2026-11-05 | Assegna alla dashboard una chiave dedicata |
La terza riga richiede una breve nota. Claude Code include una copia locale delle definizioni dei tipi del runtime degli artifact. Abbiamo letto la versione 0.2.96, fornita con Claude Code 2.1.309. Secondo questa versione, la pagina ottiene la funzione di chiamata da claude.use("mcp") e attende una risposta per circa 130 secondi.
Questo file non è una pagina web pubblica e può cambiare. Lo consideriamo solo come comportamento attuale. Quando una documentazione pubblica copre la stessa regola, prevale la documentazione pubblica.
Quali dati servono alla dashboard: tre piattaforme, tre funzionalità
Abbiamo mantenuto la dashboard essenziale. Ogni brand ha tre righe: TikTok, YouTube e Instagram. Ogni riga mostra i post al giorno, le visualizzazioni mediane o i like mediani, l'engagement rate su TikTok, i follower e l'età del post più recente. Sotto la tabella, la pagina traccia le visualizzazioni per post su TikTok negli ultimi 30 giorni. I dati provengono da tre funzionalità di EveryInfra. I prezzi sono i valori price_usd del catalogo letti alle 00:15 ora di Singapore del 2026-11-05 (catalogo).
| Piattaforma | Funzionalità | Parametri inviati | Prezzo per chiamata | Sincrona o asincrona | Campi usati dalla pagina |
|---|---|---|---|---|---|
| TikTok | tiktok/user_videos | username, limit 20 (max 50) | $0.000556 | Sincrona | Ora del post, visualizzazioni, like, commenti, condivisioni, flag di post fissato, follower, flag di verifica |
| YouTube | youtube/user_posts | url del canale, limit 20 (max 50) | $0.000556 | Sincrona | Titolo, ora relativa del post, visualizzazioni, iscritti |
instagram/user_posts | username, limit 20 (predefinito 30, max 200) | $0.000556 | Asincrona: addebitata all'invio, il polling è gratuito | Ora del post, tipo di media, like, commenti |
Tutte e tre hanno un prezzo per chiamata, non per riga. Una riga e 50 righe costano uguale, e un risultato vuoto viene rimborsato. Le pagine delle piattaforme sono API per i dati di TikTok, API per i dati di YouTube e API per i dati di Instagram.
Perché non usare l'API di ciascuna piattaforma? La YouTube Data API ha una quota predefinita di 10.000 unità al giorno (YouTube quota costs, pagina aggiornata il 2026-11-03). Può leggere altri canali, ma ti serve un tuo progetto Google Cloud. Instagram Business Discovery può leggere follower, numero di like e numero di commenti di altri account professionali. Ti servono un tuo account professionale e un token di accesso (documentazione per sviluppatori di Meta).
L'endpoint /v2/video/list/ di TikTok elenca solo i video pubblici dell'utente che ha concesso l'accesso, al massimo 20 per pagina (documentazione per sviluppatori di TikTok). Non può leggere i dati di un concorrente. Sarebbero tre set di account e token dietro una pagina che ogni collega apre. Un solo connettore è più facile da mantenere operativo.
Come si calcola ogni cella: frequenza di pubblicazione, mediane ed engagement rate
La pagina calcola ogni numero al momento del rendering. La cache salva solo i campi grezzi, così puoi cambiare una formula senza un nuovo recupero. «Post al giorno» è il numero di post non fissati diviso per i giorni tra il più vecchio di quei post e il momento del recupero. YouTube fornisce orari relativi come «3w ago» o «2mo ago». Dopo la conversione in giorni, la precisione è di una settimana o di un mese. Per questo la cella di YouTube indica solo l'ordine di grandezza.
Non usiamo «post negli ultimi 30 giorni». Il secondo test più avanti spiega perché: su un account molto attivo, 20 righe non coprono 30 giorni.
Per visualizzazioni e like la pagina usa le mediane, non le medie. Le visualizzazioni dei post sui social sono molto disomogenee. Tra i 20 video YouTube più recenti di GoPro, il primo aveva 4,4 milioni di visualizzazioni e il più basso tra quelli normali 21.000. Uno o due successi alzano di molto la media, che cambia bruscamente da un giorno all'altro. L'engagement rate su TikTok è la somma di like, commenti e condivisioni divisa per le visualizzazioni, calcolata per post. La cella mostra la mediana di questi valori.
La funzionalità per YouTube non restituisce i like e quella per Instagram non restituisce le visualizzazioni. Quelle celle restano vuote e la pagina non le riempie con altri numeri. «Follower» proviene dal numero di follower dell'autore nella prima riga. La funzionalità per Instagram non lo restituisce, quindi anche quella cella è vuota.
Le celle vuote sono intenzionali. Una pagina che 10 persone consultano ogni giorno ha un rischio principale: il significato di una cella può cambiare senza che nessuno se ne accorga. Supponiamo che un giorno la funzionalità per Instagram inizi a restituire le visualizzazioni.
La cella dell'engagement passerebbe da vuota a un valore, e le persone penserebbero che il concorrente abbia cambiato strategia. Per questo la pagina indica il campo e le piattaforme sotto l'intestazione di ogni colonna. Una cella senza dati mostra un trattino.
Passaggio 1: aggiungi EveryInfra come connettore di Claude (esempio di configurazione)
EveryInfra ha due indirizzi MCP remoti per due modelli di pagamento. I passaggi seguenti sono un esempio di configurazione: per questo test non abbiamo effettuato l'accesso a Claude sul web. I nomi dell'interfaccia provengono dal Centro assistenza di Claude al 2026-11-05, quindi confrontali con ciò che vedi.
La prima opzione dà a ogni persona il proprio account EveryInfra. Usa l'indirizzo https://api.everyinfra.com/mcp/all. Una richiesta senza credenziali riceve un 401 e un header WWW-Authenticate. L'header rimanda a un documento di metadati il cui campo authorization_servers indica il servizio di accesso di EveryInfra.
L'abbiamo testato alle 00:12 ora di Singapore del 2026-11-05 (documento di metadati). È il flusso MCP standard. Il server pubblica i metadati della risorsa protetta secondo l'RFC 9728 e il client li usa per trovare il server di autorizzazione (MCP authorization, 2025-11-25, RFC 9728).
La documentazione dei connettori di Claude dice che il suo client OAuth segue le specifiche di autorizzazione 2025-03-26, 2025-06-18 e 2025-11-25. L'indirizzo di callback è https://claude.ai/api/mcp/auth_callback (Build an MCP server for Claude). Questo indirizzo elenca 24 tool.
La seconda opzione dà all'intero team una sola chiave. Usa l'indirizzo https://api.everyinfra.com/mcp. Quando aggiungi il connettore, inserisci Authorization: Bearer <EVERYINFRA_API_KEY> in «Request headers». Questo indirizzo elenca 12 tool e accetta solo una chiave. C'è però un limite da considerare.
La documentazione dei connettori di Claude indica le credenziali statiche negli header come una beta disponibile per alcune organizzazioni (Authentication for connectors, consultato il 2026-11-05). Gli Owner delle altre organizzazioni non vedono affatto la sezione «Request headers». La documentazione dice anche che questa chiave è una credenziale dell'organizzazione, non di una persona. Le richieste di tutti i membri usano la stessa chiave.
| OAuth su `/mcp/all` | Chiave condivisa su `/mcp` | |
|---|---|---|
| Chi paga | L'account EveryInfra di ciascun visitatore | L'unico account proprietario della chiave |
| Limite al minuto | 60 per account del visitatore | 60 per l'intero team, o il limite inferiore della chiave |
| Tool elencati | 24 | 12 |
| Chi può configurarlo | Qualsiasi utente Claude con piano a pagamento | Owner di Team o Enterprise, e solo se il campo beta «Request headers» è attivo |
| Rischio principale | Ogni persona deve avere un account EveryInfra con saldo disponibile | Le chiamate di tutti i membri usano la stessa chiave |
Configuration example (Claude web or desktop, Pro or Max account)
1. Customize > Connectors > + Add > Add custom connector
2. Name: EveryInfra <- the page code must use this exact server name
3. URL: https://api.everyinfra.com/mcp/all
4. Authentication: Sign in when needed <- each person signs in to their own EveryInfra account
5. Add. In the connector's tool permissions, set everyinfra_call_api to Always allow
(the Help Center says tools that need approval for each action do not work in artifacts)
Configuration example (Team or Enterprise, one Owner adds it, one shared key)
1. Organization settings > Connectors > Add custom connector
2. URL: https://api.everyinfra.com/mcp
3. Request headers: Authorization: Bearer <EVERYINFRA_API_KEY>
(beta, only some organizations see this field; make a separate key with its own per-minute limit)
4. Organization settings > Capabilities > turn on Enable artifact connectors
5. Each member clicks Connect under Customize > ConnectorsIl passaggio 5 è quello in cui nasce la maggior parte dei problemi. Claude divide i tool di ogni connettore in due gruppi, «read-only» e «write/delete». Puoi impostare ciascun gruppo su Always allow, Needs approval o Blocked (Use connectors to extend Claude's capabilities). Nella sua dichiarazione, everyinfra_call_api ha readOnlyHint: false, destructiveHint: true e openWorldHint: true. Abbiamo letto la risposta grezza di tools/list alle 00:12 ora di Singapore del 2026-11-05. Questa è l'annotazione attuale del nostro tool. Nella specifica MCP, è il tool stesso a dichiarare questi campi come indicazioni sul proprio comportamento (MCP schema, 2026-07-28).
La tua pagina dei permessi mostra in quale gruppo si trova il tool. In questo esempio di configurazione non abbiamo aperto quella pagina su claude.ai. Ecco cosa fare. Dopo aver aggiunto il connettore, apri i permessi dei suoi tool. Trova il gruppo che contiene everyinfra_call_api e impostalo su Always allow.
Il Centro assistenza dice che i tool dei connettori che richiedono approvazione per ogni azione non sono disponibili per gli artifact. Quindi, se il tool resta su «Needs approval», la dashboard resta vuota. Il tool di polling everyinfra_get_job è contrassegnato come di sola lettura, quindi non ne risente.
Passaggio 2: lo scheletro di una pagina claude code artifacts mcp
Il cuore della pagina fa tre cose. Dichiara quali tool dei connettori chiama. Controlla prima la cache condivisa. Paga una chiamata solo quando la cache è troppo vecchia.
Qui sotto c'è la parte di recupero dei dati della nostra dashboard. La pagina completa è di circa 110 righe; abbiamo omesso il codice della tabella e del grafico. claude.use("mcp") e claude.use("db") sono i due punti di accesso offerti dal runtime della pagina. Ciascuno restituisce null quando la vista non può usarlo, quindi la pagina deve funzionare anche senza.
// Capability declaration that Claude submits at publish time.
// The page cannot call tools outside it.
// capabilities: { mcp: { servers: [{ server: "EveryInfra",
// tools: ["everyinfra_call_api", "everyinfra_get_job"] }] },
// db: {} }
const SERVER = "EveryInfra", CALL = "everyinfra_call_api", JOB = "everyinfra_get_job";
const TTL_MS = 6 * 3600 * 1000; // shared cache: 6 hours
const req = (b, p) => ({
tiktok: { platform: "tiktok", action: "user_videos", params: { username: b.tiktok, limit: 50 } },
youtube: { platform: "youtube", action: "user_posts", params: { url: b.youtube, limit: 50 } },
instagram: { platform: "instagram", action: "user_posts", params: { username: b.instagram, limit: 50 } },
}[p]);
const KEEP = ["id", "post_id", "posted_at", "view_count", "like_count", "comment_count",
"share_count", "is_pinned", "author_follower_count", "author_is_verified"];
const trim = (rows) => rows.map((r) => Object.fromEntries(KEEP.filter((k) => k in r).map((k) => [k, r[k]])));
let mcp = null, db = null;
async function fetchRows(b, p, force) {
const key = `cache/${b.name}-${p}`.toLowerCase();
if (db && !force) { // 1. read the shared cache first
const snap = await db.doc(key).get().catch(() => null);
if (snap?.exists && Date.now() - snap.data().fetchedAt < TTL_MS) return snap.data();
}
if (!mcp) throw { code: "no_mcp" };
let out = (await mcp.callTool(SERVER, CALL, req(b, p))).payload; // 2. one paid call
for (let i = 0; out.job_id && out.status !== "succeeded" && i < 20; i++) {
if (["failed", "cancelled"].includes(out.status)) throw { code: "job_" + out.status };
await new Promise((r) => setTimeout(r, 15000)); // Instagram is async; polling is free
out = (await mcp.callTool(SERVER, JOB, { job_id: out.job_id })).payload;
}
const doc = { fetchedAt: Date.now(), rows: trim(out.results || []) }; // 3. keep only the fields we use
if (db) db.doc(key).set(doc).catch(() => {}); // view-only members cannot write; they still see data
return doc;
}
(async () => { [mcp, db] = await Promise.all([claude.use("mcp"), claude.use("db")]); load(false); })();Abbiamo definito diverse parti di questo codice a partire dalle risposte reali. Per prima cosa, payload è il primo blocco di testo del risultato del tool, che il runtime analizza come JSON. EveryInfra restituisce testo JSON, quindi la pagina legge direttamente payload.results.
Secondo: ogni risposta contiene anche i blocchi billing e quota, con l'addebito di questa chiamata e il saldo dell'account. Con una chiave condivisa, il codice della pagina può leggere il saldo dell'account dell'organizzazione. Per questo trim conserva solo i dieci campi che servono alla pagina. Il saldo non viene scritto nello storage condiviso e non viene mostrato.
Terzo: la pagina non ripete automaticamente una chiamata non riuscita. Le definizioni dei tipi locali indicano che, per un tool non di sola lettura, in caso di timeout o perdita della connessione non è possibile sapere quale sia stato l'esito. Per effettuare una nuova chiamata, il visitatore deve intervenire di nuovo. Una risposta 429 di EveryInfra non viene addebitata, quindi la pagina può mostrare un pulsante «Riprova» accanto all'errore.
Il runtime della pagina restituisce codici di errore, e ogni codice richiede un messaggio diverso. La tabella seguente associa ciascun codice definito nei tipi del runtime al messaggio mostrato dalla pagina.
| Codice di errore | Cosa significa | Cosa mostra la pagina |
|---|---|---|
server_not_connected | Il visitatore non ha un connettore con questo nome | «Aggiungi il connettore EveryInfra» |
approval_required | La chiamata richiede l'approvazione del visitatore | Un pulsante che esegue la stessa chiamata una sola volta |
needs_reauth | La sessione di accesso al connettore è scaduta | «Ricollega EveryInfra in Impostazioni > Connettori» |
tool_error | Il tool è stato eseguito e ha segnalato un errore, ad esempio un 429 | Il testo dell'errore e un pulsante «Riprova» |
server_unavailable | Nessuna risposta entro il tempo previsto, oppure un errore del server | «Non disponibile», senza nuovi tentativi automatici per questo tool a pagamento |

Non abbiamo acquisito questo screenshot in claude.ai. Sul lato Claude, questo articolo fornisce solo un esempio di configurazione, e non abbiamo pubblicato questa dashboard in claude.ai. Sulla nostra macchina, un piccolo mock di claude.use() ha passato le risposte reali salvate allo stesso codice della pagina. Lo screenshot mostra che il codice della pagina e la struttura della risposta sono compatibili. Mostra anche che i numeri sono corretti.
Ogni cella calcolata dal JavaScript coincide con il risultato di uno script Python separato. Lo screenshot non può mostrare la richiesta di autorizzazione di claude.ai, la prima approvazione né il comportamento della cache. Li vedrai solo dopo aver pubblicato nel tuo account.
Un round trip reale: una chiamata per ogni piattaforma
Prima il round trip TikTok grezzo. Alle 00:18:50 ora di Singapore del 2026-11-05 abbiamo inviato una tools/call a https://api.everyinfra.com/mcp. Il tool era everyinfra_call_api, con lo username TikTok di GoPro e limit 20. Dopo 22,22 secondi sono tornati 49.956 byte di JSON.
C'erano 20 video. Uno era un annuncio fissato del 2025. Gli altri 19 erano ordinati dal più recente al meno recente; il più recente era stato pubblicato il 2026-11-04, 2,3 ore prima del recupero dei dati. Ogni riga aveva 35 campi e billing.charged_usd era 0.000556.

Abbiamo inviato la chiamata YouTube alle 00:19:16. La risposta è arrivata in 11,66 secondi, con 13.047 byte. Conteneva 20 video con titoli, visualizzazioni e numero di iscritti del canale (11,3 milioni per GoPro). Non c'erano i conteggi dei like. Gli orari di pubblicazione erano relativi, come «4d ago», «3w ago» e «1mo ago». I conteggi delle visualizzazioni erano arrotondati, come 125.000 e 300.000.
Due delle 20 righe erano anomale. Il campo dell'ora di pubblicazione conteneva «and NASA» oppure «and» seguito dal nome di un partner, e le visualizzazioni erano 0. Sono video che GoPro ha pubblicato insieme a un partner. La pagina deve tenere separate queste righe ed escluderle dalla mediana. Altrimenti abbassano la mediana delle visualizzazioni.
Instagram è asincrono. Abbiamo inviato la richiesta per GoPro alle 00:19:28. Dopo 8,48 secondi è tornato un ID di job con status: running e l'indicazione di leggere il risultato con everyinfra_get_job. L'addebito avviene all'invio, e il polling è gratuito.
Nel primo round abbiamo letto i job solo dopo aver inviato le richieste per tutti e tre i brand. Il job di GoPro era ancora in esecuzione 23 secondi dopo l'invio. Dopo 223 secondi era terminato, con 20 post e 34.031 byte.
Abbiamo interrogato il job di DJI ogni 15 secondi. Risultava running alle 00:23:27, finalizing alle 00:23:43 e succeeded alle 00:23:58, per un totale di circa 56 secondi. La risposta di Instagram contiene like e commenti, ma non visualizzazioni né il numero di follower. Le note sui campi del catalogo dicono lo stesso: questa funzionalità non restituisce nessuno dei due dati e restituisce al massimo 48 post.
Test 1: quanto dura ogni chiamata
A ogni apertura, la pagina esegue 9 chiamate. La durata di ciascuna chiamata determina per quanto tempo la prima schermata resta vuota. Il grafico seguente mostra tutte le 36 chiamate dei round uno, due e tre, con un punto per chiamata. La mediana delle chiamate sincrone a TikTok è di 21,23 secondi, mentre quella delle chiamate a YouTube è di 14,00 secondi. Entrambe le distribuzioni hanno una lunga coda tra 50 e 70 secondi.
La chiamata YouTube per Insta360 ha richiesto 66,58 secondi. Quella YouTube per Oura ha richiesto 69,16 secondi e poi ha restituito 0 righe, con rimborso automatico. Gli invii Instagram sono rapidi, con una mediana di 2,12 secondi. Il risultato richiede poi da uno a diversi minuti in più.
| Chiamata | Chiamate | Mediana (s) | Più rapida (s) | Più lenta (s) |
|---|---|---|---|---|
| TikTok sincrono | 12 | 21.23 | 8.62 | 52.78 |
| YouTube sincrono | 12 | 14.00 | 8.71 | 69.16 |
| Invio Instagram | 12 | 2.12 | 1.90 | 12.19 |
| Completamento Instagram (limite superiore) | 12 | 143 | 47 | 510 |
Questi numeri cambiano il design della pagina in tre modi. Primo: a ogni apertura, la pagina deve inviare le 9 chiamate in parallelo. Se venissero eseguite in coda, nel caso peggiore passerebbero cinque o sei minuti prima di completare la prima schermata. Anche in parallelo, la cella più lenta richiede più di un minuto. Quindi ogni cella ha bisogno di un proprio stato di «caricamento».
Secondo: per Instagram servono invio, ID del job e polling. Una sola chiamata sincrona non basta. Il runtime della pagina attende una risposta per circa 130 secondi, e le app ospitate di Claude interrompono una chiamata a un tool dopo 240 secondi. Nel secondo round, il nostro job Instagram più lento ha impiegato 510 secondi dall'invio al primo polling che ha rilevato il successo.
In parte, quel tempo dipendeva dal ritardo nel nostro polling. Nel terzo round abbiamo eseguito il polling ogni 15 secondi e tutti e tre i job sono terminati in 47-59 secondi. Terzo: una cache elimina tutta questa attesa. Leggere 9 celle dallo storage condiviso richiede pochi millisecondi.
Test 2: quanti giorni coprono 20 righe
Il primo e il secondo round hanno usato limit 20. Per gli account molto attivi, 20 righe non bastano a coprire una finestra di 30 giorni. Per i brand di wearable di questo articolo il quadro è misto. I 20 video TikTok di WHOOP coprivano 37,1 giorni, mentre i suoi 20 post Instagram ne coprivano solo 14,3. Oura pubblica meno spesso: 19 video TikTok coprivano 83,9 giorni e 20 post Instagram 27,0 giorni. I 20 video YouTube di Garmin coprivano circa 60 giorni e i suoi 20 post Instagram 40,1 giorni.
I brand di videocamere sono più attivi. I 17 video TikTok non fissati di Insta360 coprivano solo 7,2 giorni. Per questo la pagina mostra i post al giorno e non i post in 30 giorni.
La soluzione migliore è usare un limit più alto. Tutte e tre le funzionalità hanno un prezzo per chiamata. TikTok e YouTube consentono fino a 50 righe, mentre Instagram ne consente fino a 200. Aumentare il numero di righe non cambia il costo. Tra le 01:03 e le 01:05 ora di Singapore abbiamo effettuato altre 3 chiamate con limit 50.
Insta360 su TikTok è passato da 7,2 giorni con 20 righe a 24,0 giorni con 50 righe. Mango su TikTok è passato da 14,1 a 56,1 giorni. GoPro su YouTube è passato da circa 150 a circa 365 giorni. Ogni chiamata è costata comunque 0,000556 $.
Il prezzo da pagare è la dimensione. Ogni riga TikTok ha 35 campi. 20 righe occupano circa 50.000 byte e 50 righe sono arrivate a 137.072 byte. Rispetto al limite di 150.000 caratteri per un singolo risultato di tool nelle app ospitate di Claude, resta un margine di soli circa 13.900 caratteri: la chiamata per Insta360 ha restituito 136.062 caratteri.
È il punto su cui vogliamo insistere maggiormente dopo questi test. Non impostare limit al massimo senza prima controllare le dimensioni della risposta. TikTok con 50 righe è già vicino al limite. Per andare oltre le 50 righe servono la paginazione o la modalità asincrona.
| Chiamata (2026-11-05, ora di Singapore) | Giorni in 20 righe | Giorni in 50 righe | Caratteri restituiti | Margine rispetto al limite di 150.000 | Secondi |
|---|---|---|---|---|---|
| Insta360 TikTok, 01:03:59 | 7.2 | 24.0 | 136,062 | 13,938 | 19.75 |
| Mango TikTok, 01:04:27 | 14.1 | 56.1 | 121,794 | 28,206 | 30.70 |
| GoPro YouTube, 01:05:06 | 150 | 365 | 31,212 | 118,788 | 11.52 |
Ecco i numeri del secondo round per i tre brand di wearable. Il video TikTok e il post Instagram più recenti di Oura erano entrambi del 2026-11-02. Il post Instagram più recente di Garmin era del 2026-10-31.
| Brand e piattaforma | Post al giorno | Visualizzazioni mediane | Like mediani | Tasso di engagement | Follower |
|---|---|---|---|---|---|
| Oura, TikTok | 0.23 | 20,700 | — | 1.09% | 161,600 |
| Oura, YouTube | — (0 righe, addebito rimborsato) | — | — | — | — |
| Oura, Instagram | 0.74 | — | 1,785 | — | — |
| WHOOP, TikTok | 0.54 | 17,250 | — | 2.82% | 415,900 |
| WHOOP, YouTube | 0.19 | 7,100 | — | — | 165,000 |
| WHOOP, Instagram | 1.40 | — | 3,412 | — | — |
| Garmin, TikTok | — (account segnaposto) | — | — | — | 21 |
| Garmin, YouTube | 0.33 | 22,500 | — | — | 368,000 |
| Garmin, Instagram | 0.50 | — | 7,228 | — | — |
Test 3: andamento delle visualizzazioni su TikTok
La parte inferiore della dashboard traccia le visualizzazioni TikTok per post negli ultimi 30 giorni. Il grafico seguente usa le risposte reali del secondo round per i brand di wearable, su scala logaritmica. WHOOP pubblica circa ogni due giorni. La maggior parte dei suoi video ha tra 5.000 e 20.000 visualizzazioni, e il più visto ne ha 65.000.
Oura pubblica meno spesso, con 5 video in questa finestra compresi tra 3.040 e 25.900 visualizzazioni. Per Oura, la mediana delle visualizzazioni per video era 20.700 e il tasso di engagement mediano era dell'1,09%. Per WHOOP, la mediana delle visualizzazioni era 17.250 e il tasso di engagement mediano era del 2,82%.
Leggi questo grafico con cautela. Ogni punto è il totale delle visualizzazioni al momento del recupero, non le visualizzazioni in un periodo fisso. Un video di ieri e uno di tre settimane fa non sono confrontabili, e il più recente sembra sempre più debole. Per capire «chi è andato meglio questa settimana», confronta le visualizzazioni nelle prime 48 ore dalla pubblicazione. Per farlo, la pagina deve salvare le visualizzazioni di ogni video quando lo vede per la prima volta e recuperarle di nuovo 48 ore dopo.
Lo storage condiviso può farlo, la cache integrata no. Lo storage condiviso può conservare la cronologia, mentre la cache del browser conserva solo l'ultimo risultato.
Test 4: quanto sono cambiati i dati in 41 minuti
Il periodo di validità più adatto per la cache dipende dalla velocità con cui cambiano i dati. Tra le 01:00 e le 01:03 ora di Singapore abbiamo ripetuto le chiamate del primo round per i tre brand di videocamere su tutte e tre le piattaforme. L'intervallo rispetto al primo round era di circa 41 minuti (0,7 ore). Abbiamo confrontato le visualizzazioni o i like degli stessi post.
Tra un round e l'altro non è comparso nessun nuovo post in nessuna delle 9 celle. Quasi tutte le variazioni riguardano post dell'ultimo giorno o due. Su TikTok sono cambiati 15 video di Insta360, ma l'aumento mediano è stato solo dello 0,18%. L'aumento più ampio ha riguardato un video del 2026-11-03, passato da 247.300 a 259.800 visualizzazioni (+5,05%).
L'aumento più ampio per DJI ha riguardato un video del 2026-11-04 (+5,37%). Solo 5 video di GoPro hanno registrato variazioni. L'aumento più ampio ha riguardato il video del 2026-11-04, passato da 1.532 a 1.626 visualizzazioni.
Su Instagram sono cambiati più post (da 12 a 17 su 20), ma l'aumento mediano è stato di circa lo 0,1%. I due aumenti più ampi riguardavano entrambi post nuovi del 2026-11-04. Un post di Insta360 è passato da 742 a 916 like (+23,4%). Un post di DJI è passato da 2.406 a 2.700 like (+12,2%). Su YouTube è cambiato al massimo 1 video su 20 per canale. I conteggi delle visualizzazioni sono arrotondati (ad esempio 125.000), quindi i piccoli aumenti non si vedono.
| Brand e piattaforma | Campo | Righe cambiate su 20 | Variazione mediana | Variazione più ampia |
|---|---|---|---|---|
| GoPro TikTok | Visualizzazioni | 5 | 0.00% | 6.14% |
| GoPro YouTube | Visualizzazioni | 1 | 0.00% | 0.26% |
| GoPro Instagram | Like | 16 | 0.06% | 0.46% |
| Insta360 TikTok | Visualizzazioni | 15 | 0.18% | 5.05% |
| Insta360 YouTube | Visualizzazioni | 0 | 0.00% | 0.00% |
| Insta360 Instagram | Like | 12 | 0.10% | 23.45% |
| DJI TikTok | Visualizzazioni | 14 | 0.36% | 5.37% |
| DJI YouTube | Visualizzazioni | 1 | 0.00% | 1.20% |
| DJI Instagram | Like | 17 | 0.10% | 12.22% |
Il risultato è chiaro. Per celle come post al giorno e visualizzazioni mediane, una cache condivisa di 6 ore non fa perdere quasi nulla. I post più vecchi sono variati di meno dell'1% in 41 minuti. A cambiare sono i post dell'ultimo giorno.
La pagina tiene traccia di quanto velocemente crescono i nuovi post? Allora dedica alle ultime 48 ore una riga a parte. Usa una cache più breve per quella riga, ad esempio 1 ora. Lascia le altre celle con un aggiornamento ogni 6-24 ore.
Test 5: dimensione delle risposte e storage condiviso
Ogni artifact ha 20 MB di storage, solo testo (support 17153992). Le nostre 9 risposte grezze per un'apertura arrivano in totale a circa 326 KB. Con trim che conserva dieci campi, scendono a 27,6 KB, ovvero l'8,5% dell'originale. Anche conservando come cronologia una copia ogni 6 ore, 120 copie al mese occupano solo 3,3 MB.
È ben al di sotto dei 20 MB. Non salvare la risposta grezza completa. Un motivo è la dimensione. L'altro è il saldo dell'account che contiene, perché ogni membro può leggere lo storage condiviso.
Trappole nei dati: account segnaposto, video con partner e risultati vuoti
Su 27 celle di dati in questo test, tre non potevano finire nella dashboard così com'erano. Ognuna aveva una causa diversa, e la pagina deve rilevarle tutte.
| Caso | Esempio reale (2026-11-05, ora di Singapore) | Addebito | Cosa fa la pagina |
|---|---|---|---|
| Lo username appartiene a qualcun altro | Garmin su TikTok: l'handle che abbiamo ipotizzato in base al nome del brand ha restituito 1 riga da un account non verificato con 21 follower | $0.000556 | Segnala «verifica account» quando i follower sono molto pochi o author_is_verified è false, ed escludilo dai confronti |
| Righe di video con partner | GoPro, Insta360 e DJI su YouTube avevano ciascuno da 2 a 4 righe con ora di pubblicazione «and» seguita dal nome di un partner e 0 visualizzazioni | Addebito normale | Escludi dalla mediana le righe con ora di pubblicazione illeggibile ed elencale come «post con partner» |
| Risultato vuoto | L'indirizzo del canale YouTube di Oura ha restituito 0 righe dopo 69,16 secondi | Rimborsato, 0 $ | Mostra «nessun post trovato a questo indirizzo» e chiedi all'utente di verificare l'indirizzo del canale |
| Post fissati | 5 dei 9 account TikTok avevano post fissati, 3 ciascuno per Insta360 e DJI | Addebito normale | Rimuovi i post fissati prima di calcolare la frequenza di pubblicazione e le mediane |
| Limite al minuto raggiunto | 4 risposte con 429 nel primo round, 3 delle quali alle 00:19:51; il testo indicava che il limite della chiave era di 10 al minuto | Nessun addebito | Mostra il numero di secondi indicato da retry_after e un pulsante «Riprova» |
La prima riga è quella che si rischia più facilmente di trascurare. Lo username TikTok di un brand non coincide sempre con il nome del brand. L'handle che abbiamo provato appartiene a un piccolo account personale. La chiamata viene addebitata normalmente, perché l'API ha effettivamente restituito contenuti. Quando aggiungi un brand per la prima volta, chiedi a Claude in una chat di verificare l'account con una funzionalità di profilo come tiktok/profile. Controlla il flag di verifica e il numero di follower, e solo dopo inserisci l'handle nella pagina.
Costo per apertura: 10 persone, 3 aperture al giorno
Al prezzo di catalogo del 2026-11-05, ognuna delle tre funzionalità costa 0,000556 $ per chiamata. La dashboard ha 3 brand e 3 piattaforme per brand, quindi un'apertura corrisponde a 9 chiamate per 0,005004 $. Il tool di polling di Instagram everyinfra_get_job è gratuito. I risultati vuoti vengono rimborsati e le risposte 429 non vengono addebitate.
| Piano | Recuperi al mese | Chiamate addebitate | Costo dei dati al mese | Nota |
|---|---|---|---|---|
| Nessuna cache | Tutte le 900 aperture | 8,100 | $4.50 | 10 persone × 3 aperture × 30 giorni × 0,005004 $ |
| Per persona, 24 ore | 1 al giorno ciascuno, 300 | 2,700 | $1.50 | La cache integrata non può farlo, perché al momento il nostro tool non è contrassegnato come di sola lettura; usa lo storage personale |
| Condivisa, 6 ore | 4 al giorno, 120 | 1,080 | $0.60 | Conservata nello storage condiviso dell'artifact; recupera i dati la prima persona che apre la pagina dopo la scadenza |
| Condivisa, 24 ore | 1 al giorno, 30 | 270 | $0.15 | Adatta a una pagina che consulti alla riunione settimanale |
| Per riferimento: 10 posti Team Standard, al mese | — | — | $250 | claude.com/pricing, 2026-11-05 |
Tutti questi importi sono bassi. Il piano più costoso resta sotto i 5 $ al mese, contro i 250 $ di 10 posti Team. Prima però valuta due dettagli. Con OAuth, la prima persona che apre la pagina dopo la scadenza della cache paga quel recupero. Così il collega che arriva per primo ogni mattina paga per tutti.
L'importo è minimo, ma indicalo sulla pagina. Con una chiave condivisa, tutti gli addebiti vanno sull'unico account dell'organizzazione. Se il saldo si esaurisce, la dashboard si svuota per tutto il team contemporaneamente. Imposta un avviso di saldo basso per quell'account nella console di EveryInfra.
Come usare la cache per non pagare ogni apertura
Il runtime delle pagine di Claude ha una propria cache delle chiamate. Per i tool dichiarati di sola lettura (readOnlyHint: true), conserva i risultati per 5 minuti per impostazione predefinita, e puoi portare questo valore fino a 7 giorni. La documentazione degli Artifacts dice anche che una pagina riaperta mostra prima le risposte in cache. Le definizioni dei tipi del runtime nella nostra installazione locale di Claude Code 2.1.309 (versione 0.2.96, non documentazione pubblica) aggiungono però una regola. Per un tool che dichiara readOnlyHint: false, le opzioni della cache vengono ignorate e la chiamata non viene mai messa in cache. Inoltre, per quel tool la pagina non può usare il metodo di aggiornamento automatico watchTool.
L'annotazione attuale di everyinfra_call_api rientra in questa regola. Quindi il runtime non riutilizza mai i risultati e ogni chiamata viene addebitata. La soluzione è semplice: lascia che la pagina gestisca una propria cache. Ecco il nostro metodo.
Consigliamo lo storage condiviso dell'artifact (la funzionalità db). Salva il risultato ridotto e l'ora del recupero per ogni cella. All'apertura, leggi prima questi dati e recupera di nuovo solo dopo 6 ore. Così ottieni tre vantaggi.
Il costo scende da 4,50 $ a 0,60 $ al mese. Quando la cache è valida, la prima schermata compare in pochi millisecondi invece che in un minuto. E il carico al minuto diminuisce, come mostra il grafico seguente.
Per impostazione predefinita, i Contributor e i ruoli superiori possono scrivere nello storage condiviso, mentre i membri con sola visualizzazione possono solo leggerlo. Quindi un membro con sola visualizzazione che apre una pagina scaduta paga un recupero e vede dati aggiornati. Però non può riscrivere il risultato, e la persona successiva recupera di nuovo i dati. Il codice deve gestire questo caso.
Il limite al minuto conta solo con una chiave condivisa. Per impostazione predefinita EveryInfra consente 60 chiamate al minuto per account, sommando tutte le chiavi (pagina dei prezzi). Supponi che 10 persone aprano una pagina senza cache nello stesso minuto, prima di uno stand-up. Sono 90 chiamate su un solo account, e le ultime 30 ricevono un 429. Non vengono addebitate, ma quelle celle restano vuote.
La chiave di test di questo articolo aveva un proprio limite di 10 al minuto. Nel primo round ha raggiunto quel limite 4 volte, 3 delle quali alle 00:19:51. Il testo indicava che il limite della chiave era esaurito e chiedeva di riprovare dopo 9 secondi. Quindi assegna alla dashboard una chiave dedicata con un limite al minuto inferiore a quello dell'account. Così la dashboard non potrà mai consumare le chiamate di cui hanno bisogno altri programmi sullo stesso account.
Anche una cache condivisa ha i suoi costi. Un post su Reddit dedicato a una dashboard di service desk in HaloPSA, con i relativi commenti, li spiega bene (thread su r/halopsa). Il primo costo riguarda l'accesso. I dati in cache sono stati recuperati con i permessi della prima persona che li ha richiesti.
I visitatori successivi potrebbero vedere dati al di fuori dei propri permessi. I dati social pubblici dei concorrenti sono uguali per tutti, quindi per noi non è un problema. Per i dati interni, invece, lo è davvero.
Il secondo costo riguarda la fiducia. Con le regole predefinite, qualsiasi Contributor può modificare i documenti della cache nello storage condiviso. Se qualcuno scrive numeri falsi, li vedono tutti i visitatori. Per evitarlo, limita la scrittura sul percorso della cache agli Editor. In cambio, i membri ordinari recuperano i dati a ogni apertura di una pagina scaduta.
Modifiche recenti
Il 2026-10-28 Anthropic ha aggiunto a Claude for Legal una galleria di artifact legali pronti all'uso. Il post definisce gli artifact «strumenti interattivi, come tracker e dashboard» e afferma che i connettori permettono di usare le fonti già adottate dai team (Introducing artifacts for legal work with Claude). Harvey, uno dei partner del lancio, ha pubblicato un post lo stesso giorno. Il suo artifact Intake si collega a Harvey tramite il server MCP di Harvey (blog di Harvey). Il 2026-10-21 le note di rilascio dell'Help Center hanno registrato Claude Duet e altri aggiornamenti (note di rilascio). Il 2026-10-15, secondo le stesse note di rilascio, i template degli artifact sono stati attivati per impostazione predefinita nei piani Enterprise.
Il 2026-10-08 Claude Dashboards e Claude Motion sono entrati in beta. Dashboards è disponibile nei piani a pagamento e si collega a piattaforme di dati come BigQuery e Snowflake. Funziona anche con altri connettori, e ogni grafico mostra quando i suoi dati sono stati aggiornati l'ultima volta (blog di Claude, Get started with Claude dashboards). L'articolo di The New Stack dello stesso giorno cita un portavoce di Anthropic.
Per impostazione predefinita, le query di una dashboard condivisa vengono eseguite con le connessioni di ciascun visitatore (The New Stack). Dashboards è orientato al SQL su un data warehouse. Per una pagina che chiama API per i dati social, come questa, un semplice artifact con un connettore MCP è più diretto.
Sul lato Claude Code, la v2.1.209 ha corretto un problema per cui la pubblicazione accettava nomi di tool che il connettore non espone. Dalla v2.1.265, il comando di pubblicazione controlla i nomi dei tool dichiarati dalla pagina e impedisce la pubblicazione se nessuno corrisponde (changelog di Claude Code, Artifacts). La versione più recente che abbiamo visto il 2026-11-05 era la v2.1.318.
Un'issue su GitHub è ancora aperta. Il 2026-08-06 un utente ha segnalato che un aggiornamento da una sessione cloud cancella le autorizzazioni dei connettori. L'app non offre un punto in cui concederle di nuovo (claude-ai-mcp #787). Un utente su Reddit ha incontrato lo stesso errore «not in this artifact's mcp_tools allowlist» (thread su r/ClaudeAI).
FAQ sugli artifact di Claude
Gli Artifacts di Claude possono chiamare i connettori MCP collegati?
Sì. Fonte: il suggerimento di Google «claude code artifacts can now call mcp connectors». Un artifact pubblicato può chiamare tool MCP ogni volta che qualcuno lo apre, tramite i connettori claude.ai di chi lo visualizza. Serve un piano Pro, Max, Ultra, Team o Enterprise. Per pubblicare da Claude Code serve la v2.1.209 o successiva. Contano solo i connettori di claude.ai, e la pagina pubblicata non può chiamare server definiti in un .mcp.json locale (Artifacts).
Le chiamate MCP degli artifact di Claude hanno un limite?
Fonte: il suggerimento di Google «claude artifacts mcp limits». Al 2026-11-05, la documentazione pubblica di Claude non indica un limite per le chiamate ai connettori dagli artifact. Dice solo che l'utilizzo rientra nei limiti di ciascuna persona. I limiti documentati sono circa 150.000 caratteri per risultato e 240 secondi per chiamata su claude.ai e desktop (Build an MCP server for Claude). Si applica anche il limite di frequenza delle richieste del server del connettore. Per impostazione predefinita EveryInfra consente 60 chiamate al minuto per account.
Chi non ha un account Claude può vedere i dati live?
No. Fonte: un thread su r/ClaudeCode che chiede come mostrare una dashboard di un database a manager senza licenza Claude. Per le persone esterne e per chi apre un link pubblico senza aver effettuato l'accesso, le parti con connettori non vengono eseguite. L'Help Center precisa anche che gli artifact collegati ad app non possono usare «Anyone with the link» (Share artifacts). Per i lettori esterni, esporta uno snapshot statico o crea una piccola pagina web interna con un proprio sistema di accesso.
Perché la mia dashboard condivisa è vuota per i colleghi?
Fonte: un thread su r/ClaudeAI in cui una dashboard era vuota per tutto il team. I connettori appartengono a ciascun account. Ogni visitatore deve collegare tutti i connettori usati dalla pagina e approvare la prima chiamata. Nei piani Team ed Enterprise, verifica che «Enable artifact connectors» sia attivo. Controlla anche che il tool non sia impostato su «Needs approval» nei permessi del connettore. Se la pagina chiama nomi di tool che il connettore non espone, la pagina è vuota per tutti (Artifacts troubleshooting).
Cosa significa «not in this artifact's allowlist» dopo una nuova pubblicazione?
Fonte: un thread su r/ClaudeAI e l'issue 787 del repository claude-ai-mcp su GitHub. A decidere quali tool può chiamare una pagina è la dichiarazione fatta al momento della pubblicazione, non il codice della pagina. Un aggiornamento da una sessione cloud può cancellare quella dichiarazione. Nei thread, l'unica soluzione funzionante è stata pubblicare di nuovo da una sessione locale con i nomi completi del connettore e dei tool.
Una cache condivisa può mostrare dati che alcune persone non dovrebbero vedere, o essere modificata da qualcuno?
Fonte: i commenti a un post su r/halopsa dedicato a una dashboard di service desk. Sì, entrambi i rischi sono reali. I dati in cache sono stati recuperati con i permessi della prima persona che li ha richiesti. Con le regole predefinite, i Contributor possono scrivere i documenti della cache.
I dati social pubblici dei concorrenti non presentano differenze di accesso. Per impedire le modifiche, limita la scrittura sul percorso della cache agli Editor. In quel caso i membri ordinari recuperano i dati a ogni apertura di una pagina scaduta.
Gli artifact di Claude hanno un costo aggiuntivo?
Fonte: il suggerimento di Google «do claude artifacts cost money». Gli artifact sono inclusi nei piani a pagamento e non hanno un prezzo a parte, e l'utilizzo rientra nei limiti di ciascuna persona. Le chiamate alle API per i dati sono a parte. Nell'esempio di questo articolo, un'apertura costa 0,005004 $. Per 10 persone con 3 aperture al giorno, senza cache si spendono 4,50 $ al mese, con una cache condivisa di 6 ore 0,60 $.
Per iniziare
- Registrati su EveryInfra ed effettua una ricarica. Segui la guida rapida per ottenere una chiave o preparare l'accesso OAuth. Le guide per l'MCP remoto sono in server MCP e configurazione dell'MCP remoto.
- Aggiungi il connettore in Claude come nell'esempio di configurazione qui sopra. Chiamalo EveryInfra e imposta
everyinfra_call_apisu Always allow. - In una chat di Claude, chiama il connettore una volta per ogni brand. Controlla username, indirizzi dei canali e campi restituiti.
- Chiedi a Claude di creare la pagina a partire dallo scheletro di questo articolo. Dichiara le funzionalità
mcpedb, pubblica e condividi la pagina solo all'interno dell'organizzazione. - Ogni collega attiva il connettore nel proprio account e approva la prima chiamata. Indica nella pagina la durata della cache e chi paga il recupero dopo la scadenza.
Letture correlate
- Subagent di Claude Code: i subagent Haiku recuperano in parallelo gli account TikTok dei brand: gli stessi dati TikTok, recuperati in parallelo dai subagent in Claude Code.
- Specifica MCP 2026: cosa serve per andare in produzione: dichiarazioni dei tool, autorizzazione e MCP remoto in produzione.
Il blog di EveryInfra ha altri due articoli sui concorrenti. Un solo SKILL.md per quattro strumenti AI: analisi delle recensioni dei concorrenti inserisce l'analisi delle recensioni in un'Agent Skill. La esegui una volta in uno strumento come Claude Code o Codex e ottieni un report statico. Tracker dei social dei concorrenti con ChatGPT Spaces usa una pagina condivisa in uno Space di ChatGPT. Quella pagina non si aggiorna da sola. Un'attività pianificata settimanale vi scrive i nuovi numeri, quindi i visitatori vedono sempre i dati dell'ultima esecuzione.
Questo articolo differisce in due aspetti: quando vengono recuperati i dati e chi li paga. Un artifact di Claude recupera i dati nel momento in cui ogni persona apre la pagina, tramite i connettori di quella persona. Quindi la frequenza di aggiornamento non dipende da un'attività pianificata. Dipende dal numero di visitatori e da quanto spesso aprono la pagina. A pagare non è chi ha configurato un'attività.
Con OAuth paga ogni visitatore. Con una chiave condivisa paga l'organizzazione che ha inserito la chiave. Questi due fatti determinano il design della cache, e tutti i test seguenti ruotano attorno a essi. Se ti serve solo un report statico settimanale, gli altri due articoli sono più semplici.
Riferimenti
- Claude Help Center, «What are artifacts and how do I use them?», consultato il 2026-11-05: https://support.claude.com/en/articles/17153992-what-are-artifacts-and-how-do-i-use-them
- Claude Help Center, «Share artifacts», consultato il 2026-11-05: https://support.claude.com/en/articles/9547008-share-artifacts
- Claude Help Center, «Artifacts admin guide for Team and Enterprise plans», consultato il 2026-11-05: https://support.claude.com/en/articles/16994751-artifacts-admin-guide-for-team-and-enterprise-plans
- Claude Help Center, «Get started with custom connectors using remote MCP», consultato il 2026-11-05: https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp
- Claude Help Center, «Use connectors to extend Claude's capabilities», consultato il 2026-11-05: https://support.claude.com/en/articles/11176164-use-connectors-to-extend-claude-s-capabilities
- Claude Help Center, «Get started with Claude dashboards», consultato il 2026-11-05: https://support.claude.com/en/articles/17454700-get-started-with-claude-dashboards
- Claude Help Center, «Release notes», consultato il 2026-11-05: https://support.claude.com/en/articles/12138966-release-notes
- Documentazione di Claude Code, «Artifacts», consultata il 2026-11-05: https://code.claude.com/docs/en/artifacts
- Claude Code, «Week 29 digest (July 13 to 17, 2026)», consultato il 2026-11-05: https://code.claude.com/docs/en/whats-new/2026-w29
- Claude Code, «What's new», indice, consultato il 2026-11-05: https://code.claude.com/docs/en/whats-new
- Documentazione di Claude Code, «Connect Claude Code to tools via MCP», consultata il 2026-11-05: https://code.claude.com/docs/en/mcp
- Changelog di Claude Code su GitHub, consultato il 2026-11-05: https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md
- Changelog di Claude Code nella documentazione, consultato il 2026-11-05: https://code.claude.com/docs/en/changelog
- Documentazione per sviluppatori di claude.com, «Build an MCP server for Claude», consultata il 2026-11-05: https://claude.com/docs/connectors/building
- Documentazione per sviluppatori di claude.com, «Authentication for connectors», consultata il 2026-11-05: https://claude.com/docs/connectors/building/authentication
- Documentazione dell'API di Claude, «MCP connector», consultata il 2026-11-05: https://docs.claude.com/en/docs/agents-and-tools/mcp-connector
- Pagina dei prezzi di Claude, consultata il 2026-11-05: https://claude.com/pricing
- Blog di Claude, «Build live dashboards and animate explainers with Claude» (2026-10-08), consultato il 2026-11-05: https://claude.com/blog/dashboards-and-motion
- Claude, «Introducing artifacts for legal work with Claude» (2026-10-28), consultato il 2026-11-05: https://claude.com/resources/articles/introducing-artifacts-for-legal-work
- Claude, «Turn ideas into interactive AI-powered apps» (con la nota di aggiornamento del 2025-10-21), consultato il 2026-11-05: https://claude.com/resources/articles/build-artifacts
- GitHub anthropics/claude-ai-mcp, issue 787 (aperta il 2026-08-06), consultata il 2026-11-05: https://github.com/anthropics/claude-ai-mcp/issues/787
- Specifica MCP 2025-06-18, «Tools», consultata il 2026-11-05: https://modelcontextprotocol.io/specification/2025-06-18/server/tools
- Specifica MCP 2025-06-18, «Authorization», consultata il 2026-11-05: https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization
- Specifica MCP 2025-11-25, «Authorization», consultata il 2026-11-05: https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization
- Specifica MCP 2026-07-28, «Schema Reference», consultata il 2026-11-05: https://modelcontextprotocol.io/specification/2026-07-28/schema
- IETF RFC 9728, «OAuth 2.0 Protected Resource Metadata», consultata il 2026-11-05: https://datatracker.ietf.org/doc/html/rfc9728
- IETF RFC 6750, «OAuth 2.0 Bearer Token Usage», consultata il 2026-11-05: https://datatracker.ietf.org/doc/html/rfc6750
- MDN, «429 Too Many Requests», consultato il 2026-11-05: https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/429
- Google for Developers, «YouTube Data API quota costs» (aggiornato il 2026-11-03), consultato il 2026-11-05: https://developers.google.com/youtube/v3/determine_quota_cost
- Meta for Developers, «IG User Business Discovery», consultato il 2026-11-05: https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-user/business_discovery
- Meta for Developers, «Graph API rate limits», consultato il 2026-11-05: https://developers.facebook.com/docs/graph-api/overview/rate-limiting
- TikTok for Developers, «List Videos», consultato il 2026-11-05: https://developers.tiktok.com/doc/tiktok-api-v2-video-list
- TikTok for Developers, «Understanding TikTok API Rate Limits», consultato il 2026-11-05: https://developers.tiktok.com/doc/tiktok-api-v2-rate-limit
- Server MCP remoto di EveryInfra (tools/list e tools/call), 2026-11-05: https://api.everyinfra.com/mcp
- Metadati della risorsa protetta di EveryInfra per /mcp/all, consultati alle 00:12 ora di Singapore del 2026-11-05: https://api.everyinfra.com/.well-known/oauth-protected-resource/mcp/all
- Catalogo delle funzionalità dati di EveryInfra, consultato alle 00:15 ora di Singapore del 2026-11-05: https://api.everyinfra.com/api/v1/social/catalog
- Documento OpenAPI di EveryInfra, consultato il 2026-11-05: https://api.everyinfra.com/openapi.json
- Reddit r/ClaudeCode, «Share an artifact with a database to users without a Claude License», consultato il 2026-11-05: https://www.reddit.com/r/ClaudeCode/comments/1xhwscj/help_needed_share_an_artifact_with_a_database_to/
- Reddit r/ClaudeAI, «Has anyone gotten a Claude artifact with connectors to work for their whole team?», consultato il 2026-11-05: https://www.reddit.com/r/ClaudeAI/comments/1wb1ep7/has_anyone_gotten_a_claude_artifact_with/
- Reddit r/ClaudeAI, «Problem with Artifact MCP permissions», consultato il 2026-11-05: https://www.reddit.com/r/ClaudeAI/comments/1vr1k8q/problem_with_artifact_mcp_permissions_how_can_i/
- Reddit r/halopsa, «The mother of all HaloPSA dashboards, built in Claude artifacts», consultato il 2026-11-05: https://www.reddit.com/r/halopsa/comments/1wfttq0/the_mother_of_all_halopsa_dashboards_built_in/
- Reddit r/ClaudeAI, «Artifacts cannot invoke custom MCP connectors», consultato il 2026-11-05: https://www.reddit.com/r/ClaudeAI/comments/1q8gp3l/artifacts_cannot_invoke_custom_mcp_connectors/
- The New Stack, «Claude can now build your dashboards» (2026-10-08), consultato il 2026-11-05: https://thenewstack.io/claude-dashboards-data-motion/
- Harvey, «Harvey Brings Intake to Claude for Legal Artifacts Launch» (2026-10-28), consultato il 2026-11-05: https://www.harvey.ai/blog/harvey-intake-claude-for-legal-artifact
Riferimenti BL-87