Group Product Manager
La nuova Connected Apps Platform ti consente di integrare i servizi della tua app direttamente in Gemini, in AI Mode nella Ricerca e nel sistema di AI di Android. Questa sessione fornisce una guida pratica per iniziare. Utilizzando esempi di codice e imparando da case study reali, ti guideremo attraverso il ciclo di vita dello sviluppo: creazione, test e pubblicazione della tua prima app connessa per raggiungere gli utenti nei loro workflow basati sull'AI.
Alla fine di questa sessione sarai in grado di:
destructiveHint, aiutando Gemini a chiedere una conferma esplicita quando le azioni modificano o eliminano i dati.Trascrizione
Salve a tutti.
Sono Mai e sono la responsabile di prodotto della piattaforma di app connesse a Gemini.
Più avanti, ascolterai anche Kate, la nostra DevRel Engineer.
Sta per salire.
Oggi siamo felici di parlarvi di come potete estendere la vostra app ad alcuni dei prodotti agentici più popolari di Google, Gemini e la Ricerca.
Ti spiegheremo come e perché le app connesse sono utili e magiche per i nostri utenti.
E, ancora meglio, ti mostreremo cosa serve per crearne uno.
Iniziamo.
So che molti di noi hanno notato che nell'ecosistema delle app sta accadendo qualcosa di veramente enorme.
Il modo in cui le persone utilizzano i propri dispositivi, cercano risposte e svolgono le attività non si sta solo evolvendo,
È cambiato radicalmente.
Le persone non aprono più i browser e non toccano più lo schermo.
Conversano direttamente con assistenti come Gemini.
Pongono domande complesse a Gemini, cercano risposte in modo multimodale sulla Ricerca.
E si aspettano che i dispositivi Android non solo capiscano cosa dicono, ma sappiano anche cosa vogliono fare.
Pensa ad alcuni dei tuoi flussi di lavoro che puoi svolgere in un giorno qualsiasi.
Supponiamo che tu chiedi a Gemini di aiutarti a trovare alcune opzioni per un weekend divertente con gli amici in un luogo e in un momento particolari.
I modelli di oggi possono elaborare questo piano in pochi secondi.
È fantastico.
È organizzato.
E poi?
Termina.
L'utente si trova di fronte a un muro e non sa cosa fare, con un piano ma senza conferme.
Il modello sa cosa fare, ma non ha le mani per farlo.
Quindi, devi copiare e incollare le informazioni dalla chat con Gemini in un'app o nell'altra.
A volte, se usi un dispositivo mobile, l'esperienza può essere molto macchinosa.
Poi devi ricordare tutte le informazioni e digitarle in un secondo momento.
Questo salto cognitivo e questo attrito rompono completamente la magia.
E cosa significa tutto questo per voi?
Significa che hai una domanda di utenti con intenzione di acquisto elevata che è bloccata in un fumetto della chat anziché indirizzare utenti coinvolti e di valore alla tua app.
Ed è per questo che le app connesse sono rivoluzionarie, perché ci aiutano a raggiungere i nostri utenti esattamente dove si trovano.
Inoltre, al momento, trascorrono molto tempo a conversare con assistenti come Gemini.
Quando un utente esprime una reale intenzione di agire, si tratta di un momento di fondamentale importanza nel suo percorso.
Non stanno navigando passivamente.
Hanno un obiettivo esplicito che vogliono raggiungere subito.
Abilitando le integrazioni tra le app e questi modelli generativi, gli assistenti come Gemini passano dal rispondere alle domande al portare a termine le attività.
Quando l'utente chiede un elenco di cose da fare con priorità, vuole noleggiare un'auto per un viaggio in programma o vuole acquistare gli ingredienti per una ricetta che ha appena trovato, la tua app non si trova in fondo a una pagina come link statico.
Puoi contribuire a creare la magia ed eseguire l'azione immediatamente.
E voglio essere molto chiaro su un punto, perché so che ogni sviluppatore e product leader ci sta pensando: le app connesse non servono ad astrarre la tua app.
Il tuo brand, la tua logica di business, le tue relazioni autenticate e le tue esperienze di UI personalizzate appartengono a te.
Le app connesse servono a integrare i tuoi servizi in una superficie API basata su agenti, in modo che i prodotti basati su agenti di Google possano indirizzare senza problemi gli utenti con un'intenzione di acquisto elevata direttamente al tuo prodotto.
Quindi, oggi, proprio ora, sono felice di annunciare ufficialmente il lancio della nostra Connected Apps Platform.
In passato, per raggiungere gli utenti sui prodotti Google era necessaria un'integrazione diversa per ciascuno.
Se volevi un'azione o una scorciatoia per un'app per Android, dovevi crearla.
Un'integrazione di Ricerca, un'altra.
Ma vogliamo rendere le cose il più semplici e fantastiche possibile per te.
Per questo motivo, abbiamo standardizzato l'onboarding per offrirti un unico punto di accesso per lanciare la tua app su più prodotti basati su agenti di Google.
Ora puoi creare la funzionalità della tua app una sola volta utilizzando schemi dichiarativi standard e, come per magia, questa si attiva su due dei nostri prodotti chiave, Gemini e la Ricerca.
Inoltre, a breve saranno disponibili altri prodotti.
Parliamo di questa copertura e di cosa significa per te.
Non dovresti dover creare più plug-in personalizzati, gestire quattro diverse console per sviluppatori e mantenere vari handshake autenticati solo per raggiungere gli utenti Google su Android, Gemini e la Ricerca.
Con la nostra piattaforma unificata, crei e registri le definizioni degli strumenti una sola volta.
Scegli i prodotti Google che preferisci e noi ti forniamo un unico pulsante di lancio nella nostra nuova Google Connected Console.
Quando pubblichi, le tue funzionalità diventano rilevabili da chiunque utilizzi Gemini o la Ricerca.
Che gli utenti digitino in Gemini sul proprio laptop, facciano una serie di query nella Ricerca sul web o utilizzino le funzionalità dell'assistente su Android, avranno la possibilità di utilizzare la tua app proprio quando ne hanno più bisogno, ovunque si trovino.
Per questo motivo, apriremo la nostra piattaforma in fasi, a partire dalla nostra anteprima.
Vi assicuro che l'intero team sta lavorando sodo per rendere disponibili tutte le funzionalità al maggior numero possibile di utenti nel più breve tempo possibile.
Per questa fase dell'anteprima, la piattaforma è aperta solo agli sviluppatori degli Stati Uniti.
Puoi registrarti tramite un modulo per l'accesso, che puoi trovare nella nostra guida per gli sviluppatori all'indirizzo developers.google.com/connected-apps o, se sei uno sviluppatore di Play, puoi trovarlo anche nella home page di Google Play Console.
La domanda successiva è: quanto è difficile creare uno di questi modelli?
Se hai un'API REST o degli intent Android, sei in un'ottima posizione di partenza.
Ci basiamo su concetti di sviluppo familiari.
La nostra piattaforma si integra con lo standard Model Context Protocol (MCP) tramite MCP basati su server e nativi per Android.
Per rendere tutto ancora più semplice e migliore, oggi lanciamo una nuova funzionalità di Gemini chiamata modalità sviluppatore, accessibile a tutti voi negli Stati Uniti.
In questo modo puoi giocare con la tua app all'interno di Gemini e ricevere feedback in tempo reale su stati di errore, latenza e risposte del modello.
A breve, potrai generare i tuoi set di valutazione, ottenere scorecard e benchmark delle metriche di qualità.
Sarà fantastico.
Indipendentemente dal tuo accesso alla piattaforma, puoi sempre provare la tua app in modalità sviluppatore.
Sono sicuro che non vedi l'ora di saperne di più e Kate salirà sul palco subito dopo di me per parlarne tra pochi minuti.
Per prima cosa, devo parlarti di un aspetto che sta diventando sempre più importante: la fiducia degli utenti.
Ogni volta che parliamo di agenti che agiscono per conto di qualcuno, la prima domanda è spesso: "Come facciamo a mantenere il controllo dell'utente?"
Ecco come lo vediamo in alcuni semplici concetti.
Innanzitutto, le nostre conferme variano in base al rischio.
Non inseriremo un popup prima di ogni chiamata allo strumento.
Cercare qualcosa, controllare la disponibilità di un menu, monitorare un ordine: tutto dovrebbe essere semplice.
Tuttavia, quando un'azione ha conseguenze reali, come la modifica di un elemento condiviso, il completamento di una prenotazione o l'eliminazione di un elemento che l'utente non può recuperare facilmente, il modello mira a chiedere all'utente un sì esplicito prima che l'azione venga eseguita.
In secondo luogo, i dati sensibili vengono mostrati, non nascosti.
Per questo, i nostri prodotti sono progettati per verificare quali informazioni personali possono essere condivise con la tua app.
Se vengono rilevati dati sensibili, mostriamo all'utente esattamente ciò che viene condiviso, in modo che possa decidere se continuare o meno a utilizzare la tua app in quel momento.
Terzo, quando chiediamo, siamo specifici.
Non mostriamo un vago messaggio "Vuoi procedere?", ma indichiamo l'app e cosa viene effettivamente inviato o modificato.
In questo modo, la conferma aiuta l'utente a decidere davvero, anziché essere solo un elemento su cui fare clic in modo casuale.
E poiché nessuno vuole un percorso pieno di conferme, gli utenti avranno un maggiore controllo sulla frequenza con cui vengono richieste.
Nell'app Gemini, ad esempio, gli utenti possono scegliere per app e persino per azione se consentire o meno l'azione in modo permanente.
Per te, tutto questo significa che ti chiediamo di contrassegnare i tuoi strumenti in modo onesto.
Contrassegna ciò che è di sola lettura, ciò che cambia e ciò che elimina i dati.
Questi indicatori aiutano i nostri prodotti a decidere quando coinvolgere l'utente.
Anche in questo caso, Kate ti mostrerà esattamente come fare tra pochi minuti.
Bene, torniamo al viaggio del fine settimana di cui parlavamo, la parte di pianificazione.
Ricordi quanto era difficile e frammentato?
Avevi un piano fantastico per un gruppo di amici, ma poi hai incontrato un ostacolo: hai dovuto copiare e incollare contenuti, passando da un'app all'altra.
Viator e Ticketmaster sono due dei nostri primi fantastici partner e hanno visto una reale opportunità di incontrare l'utente dove si trova.
Ha deciso di collaborare con noi e di abbattere questo muro, consentendo a questo utente con intenzione di acquisto elevata di accedere alla sua app direttamente da Gemini.
Grazie alle app connesse create da questi partner, l'intero percorso è molto più fluido e senza intoppi.
Diamo un'occhiata.
L'utente collega le app e chiede a Gemini di trovare un tour gastronomico diurno su Viator e alcuni biglietti per un concerto su Ticketmaster per un gruppo di 4 persone.
Gemini è in grado di riconoscere la funzionalità, chiama direttamente Viator e gli strumenti di Ticketmaster con le dimensioni del gruppo, le date e le preferenze corrette già compilate.
Senza uscire dalla conversazione, entrambe le app recuperano la disponibilità in tempo reale e mostrano esperienze interattive e complete direttamente nella chat per l'utente.
Anziché trovarsi in un vicolo cieco e dover gestire un sacco di schede, Viator e Ticketmaster sono esempi di partner che consentono agli utenti di fare ciò di cui hanno bisogno non appena lo scoprono, esplorando le tappe di un tour gastronomico, scegliendo i posti per un concerto e passando senza problemi dalla scoperta all'azione.
Quindi, l'era degli Avvii app statici sta svanendo, lasciando il posto a esperienze intelligenti, proattive e agentiche.
I tuoi utenti stanno già interagendo con la Ricerca e Gemini, chiedendo aiuto.
Insieme, possiamo aiutarli ad andare oltre le risposte e offrire esperienze davvero potenti e magiche.
Questo è tutto per me.
Ora passo la parola a Kate, che ti spiegherà esattamente come creare un'app connessa.
Vieni su.
Salve a tutti.
Sono Kate, una Developer Relations Engineer, e aiuto gli sviluppatori come te a eseguire l'integrazione con Connected Apps Platform.
Quindi, ti spiegherò come testare, creare ed eseguire il deployment dell'app connessa.
Come ha accennato Mai in precedenza, esistono due metodi principali per l'integrazione con la Connected Apps Platform: tramite il server MCP remoto utilizzando il protocollo MCP o tramite MCP per Android, quando puoi creare il tuo server MCP remoto sul dispositivo utilizzando la libreria AppFunctions.
Ti consigliamo di utilizzare server MCP remoti quando vuoi eseguire l'integrazione su piattaforme come Android, iOS e web.
Inoltre, alcuni sviluppatori ci hanno segnalato che a volte preferiscono l'esecuzione locale, quando i dati dell'app sono disponibili solo sul dispositivo.
Per questi casi d'uso, ti consigliamo di utilizzare Android MCP tramite la libreria Jetpack AppFunctions.
Inoltre, dai un'occhiata al talk dedicato in cui Dan e Sarah approfondiscono l'integrazione con la Connected Apps Platform tramite AppFunctions e Android MCP.
Ora vediamo come creare un server MCP remoto.
Per mostrare come funziona in pratica, abbiamo creato l'app connessa ufficiale di AndroidDevSummit.
Vediamo come funziona.
Torniamo a una demo dal vivo.
Immagina di chiedere: "AndroidDevSummit, parlami delle sessioni XR".
Al momento, Gemini si connette al nostro server MCP che abbiamo creato per questa app connessa.
Trova lo strumento giusto da chiamare e utilizza i suoi dati per creare una risposta facile da usare.
Quindi, trova le informazioni sulle sessioni relative a XR qui per il giorno 1 e il giorno 2 e alla fine esegue il rendering del nostro widget personalizzato con il brand AndroidDevSummit con il bot Android.
Quindi, direttamente in Gemini, puoi interagire con questo widget.
Puoi consultare il programma, ad esempio puoi cambiare la località o filtrare per giorno.
Puoi anche filtrare per argomenti diversi, ad esempio se voglio cercare sessioni relative alla realtà estesa, e puoi anche esaminare i dettagli e gli speaker.
Quindi, evviva!
Tutto all'interno di Gemini, la tua esperienza personalizzata con il brand, e gli utenti non devono cambiare, non devono andare a cercare altre informazioni in un'altra app, tutto in un unico posto senza interagire, senza cambiare o uscire dall'app stessa.
Torniamo alle slide.
Vediamo come creare queste app connesse.
Quindi, è molto facile avviare il tuo server MCP con la libreria FastMCP, ma ci sono quattro best practice molto importanti da seguire.
Innanzitutto, devi fornire istruzioni esplicite al server.
from mcp.server.fastmcp import FastMCP
mcp = FastMCP(
name="ADS-MCP",
instructions=(
"A Model Context Protocol server providing event "
"overview, schedules, sessions, speakers, and "
"sandbox demos for the Android Developer Summit "
),
)Quando inizializzi il server MCP, definisci sempre istruzioni chiare, descrivendo il dominio e le funzionalità delle app connesse.
La Connected Apps Platform si basa su queste istruzioni per sapere quando delegare al tuo server.
Inoltre, Google Connected Console, che ti mostrerò più avanti, convalida esplicitamente la presenza di queste istruzioni.
In secondo luogo, aggiungi annotazioni degli strumenti per la sicurezza e il controllo.
@mcp.tool(
title="List Sessions",
annotations=ToolAnnotations(
readOnlyHint=True,
destructiveHint=False,
),
meta={ … },
)
def list_sessions( … )
…Per il nostro server ADS, abbiamo queste due annotazioni.
È importante che il modello sappia quando lo strumento è di sola lettura o modifica i dati.
Quindi, se hai strumenti che modificano o eliminano le informazioni degli utenti, utilizza sempre questo destructiveHint per contrassegnarli come in grado di modificare o eliminare le operazioni.
In questo modo, Connected Apps Platform saprà che deve mostrare un messaggio di conferma a un utente per indicare che può completare l'azione.
Puoi anche configurare i tuoi strumenti in Google Connected Console, che ti mostrerò in seguito.
Infine, schemi fortemente tipizzati e docstring semantiche.
def list_sessions(
track: Optional[str] = None,
location: Optional[str] = None,
) -> List[Dict[str, Any]]:
"""Lists all sessions, optionally filtered by track
(e.g. 'Tools and performance', 'Apps Foundation',
'AI experiences', 'Android XR') or location
(e.g. 'MTV', 'Mountain View', 'London', 'LON').
"""
…Tratta le docstring dei parametri come parte del prompt.
In questo strumento list_sessions, documentiamo esplicitamente i valori previsti, come strumenti e prestazioni, o MTV rispetto a Londra per la località.
Il fattore più importante per una chiamata allo strumento accurata sono gli schemi chiari e descrittivi.
E l'ultimo, l'associazione dei metadati delle risorse della UI.
@mcp.tool(
…
meta={
"ui": {
"resourceUri": "ui://ads-mcp/summit-app",
},
…
},
)
def list_sessions(…)
…Guarda la nostra definizione della UI nel meta.
Questi metadati sono il ponte che indica a Gemini di associare l'output dello strumento direttamente alla nostra risorsa UI personalizzata qui.
Questo ci porta al rendering della UI.
@mcp.resource(
"ui://ads-mcp/summit-app",
name="summit-app",
mime_type="text/html",
)
def get_summit_ui() -> ResourceResult:
"""Renders the interactive ADS 2026 dashboard."""
return ResourceResult([
ResourceContent(
_build_summit_ui_html(),
mime_type="text/html",
)
])La Connected Apps Platform ti consente di eseguire il rendering di interfacce utente avanzate dal tuo server MCP tramite la UI delle app MCP.
E quando vuoi la massima flessibilità per un'interfaccia personalizzata ed espressiva del brand, come il nostro Android Dev Summit, puoi esporre la risorsa UI MCP.
Inoltre, Gemini può eseguire il rendering in un iframe protetto in modalità sandbox.
Successivamente, ti guiderò attraverso i test e il deployment della tua app connessa, direttamente dalla tua macchina locale alla produzione.
Sì.
Vediamo come sviluppare e testare localmente.
Durante lo sviluppo, puoi avviare facilmente il server in locale utilizzando il primo comando.
./venv/bin/python server.py
npx @modelcontextprotocol/inspectorPoi puoi utilizzare MCP Inspector per eseguire il debug del server, visualizzare gli strumenti disponibili e interagire con l'UI.
Questo è solo un esempio di come appare MCP Inspector per il nostro Android Dev Summit.
In questo modo, puoi vedere gli strumenti, la UI e testarla localmente.
In secondo luogo, dovrai eseguire il deployment del tuo server MCP su un endpoint remoto per ottenere l'accesso e convalidarlo in modalità sviluppatore di Gemini.
Puoi ospitare l'endpoint MCP su qualsiasi infrastruttura o provider cloud.
Se invece preferisci Google Cloud, è molto semplice da utilizzare con Google Cloud CLI.
Basta utilizzare questo semplice comando per eseguire il deployment e la tua app sarà disponibile da remoto.
gcloud run deploy ads-mcp-serverIl passaggio successivo consiste nel convalidare l'endpoint pubblico in modalità sviluppatore di Gemini.
Torniamo quindi a una demo dal vivo e ti mostrerò come utilizzare la modalità sviluppatore nella pratica.
È facile trovare la modalità sviluppatore: basta andare su Impostazioni e fare clic su Modalità sviluppatore.
Poi dovrai scegliere l'app connessa che vuoi testare.
Ad esempio, puoi crearne uno nuovo semplicemente fornendo un URL del server MCP qui.
Ne ho già creato uno per i test, chiamato ADS MCP, con il mio endpoint di test.
Voglio solo testare come funziona con Gemini end-to-end.
Quindi, chiediamo qualcosa.
"ADS MCP, parlami di più dell'evento."
Quindi, in questo momento, Gemini chiama il nostro server MCP e puoi anche vedere quale strumento viene chiamato nella modalità sviluppatore.
Ad esempio, per questo prompt specifico, "Può dirmi qualcos'altro su questo evento?", è stato chiamato get_summit_info.
Puoi anche vedere la risposta che ha avuto esito positivo.
Puoi anche vedere la latenza.
Puoi anche visualizzare tutti i dettagli della richiesta e della risposta.
Ad esempio, per la nostra risposta, abbiamo molte informazioni.
Puoi anche ingrandire un po' e vedere come, ad esempio, eseguire il debug delle informazioni di cui hai bisogno ed esplorare che tutto sia accurato.
Puoi anche copiarlo, il che è molto comodo se vuoi condividerlo con un collega.
Inoltre, puoi esportare l'intero log eventi e condividerlo, se necessario.
Un'altra cosa che mi piace è che puoi anche esplorare altri strumenti disponibili, quindi qui in modalità sviluppatore puoi visualizzare le informazioni sul summit, l'elenco delle sessioni e altri strumenti.
Puoi anche modificare l'ambiente per simulare diversi contesti utente.
Ad esempio, puoi modificare l'ora del giorno o le preferenze, come le lingue, e puoi anche configurare l'autenticazione.
Questa era la modalità sviluppatore.
E sì, puoi iniziare a creare il tuo server MCP oggi stesso e testarlo con la modalità sviluppatore, a partire da oggi.
È disponibile per tutti in questo momento.
Torniamo alle slide.
Ok.
Supponiamo che tu abbia già eseguito i test con la modalità sviluppatore e che tutto sembri a posto. Cosa devi fare dopo?
Per accedere alla nostra piattaforma, devi registrarti e compilare prima questo modulo di interesse.
È disponibile anche nella nostra documentazione e in Google Connected Console.
Una volta approvata la richiesta, avrai accesso a Google Connected Console, dove potrai preparare l'applicazione per l'implementazione in produzione.
All'interno della console, bastano pochi passaggi per preparare l'app.
Innanzitutto, devi creare una nuova app connessa e assegnarle un nome.
Poi devi solo selezionare le funzionalità e la categoria.
Ad esempio, per questo esempio abbiamo selezionato la produttività e facciamo clic su Crea.
Successivamente, in dettagli sull'app, devi fornire dati pubblici come il nome visualizzato, l'icona e la descrizione rivolta agli utenti, nonché le funzionalità dell'app, le limitazioni, i prompt di esempio e altri dati.
Poi, quando configuri il server MCP, devi fornire il tuo endpoint.
Devi verificare che questo dominio sia di tua proprietà e puoi anche configurare le credenziali per gli strumenti di sincronizzazione.
Tieni presente che Google Console acquisisce uno snapshot dello schema MCP, quindi ogni volta che apporti modifiche allo schema, devi tornare indietro e rifare il deployment.
In seguito, puoi semplicemente configurare la disponibilità dell'app.
Puoi scegliere le regioni in cui l'app deve essere disponibile, le lingue, le piattaforme e altre configurazioni dei singoli strumenti.
Da qui puoi semplicemente premere "Invia modifiche" e inviare il tutto per la revisione di Gemini Stage.
Puoi anche aggiungere account di test in Gestisci i tester.
E testarla immediatamente dal vivo con questi account di prova sul web, su dispositivi mobili o su qualsiasi piattaforma selezionata in precedenza, come Gemini o la Ricerca, per poi inviarla per l'anteprima finale.
Una volta che l'app è pronta, puoi implementarla in produzione a livello globale per i tuoi utenti o per regioni selezionate semplicemente inviando il pulsante.
È tutto.
Non vediamo l'ora di vedere cosa riuscirai a creare con la Connected Apps Platform, sia che tu esponga le funzionalità della tua app tramite il server MCP remoto o tramite MCP per Android.
Saremo lieti di aiutarti a creare queste straordinarie integrazioni.
Basta seguire questa documentazione e i nostri esempi disponibili utilizzando questo codice a barre.
Grazie mille per aver partecipato oggi.
Buona programmazione!
from mcp.server.fastmcp import FastMCP
mcp = FastMCP(
name="ADS-MCP",
instructions=(
"A Model Context Protocol server providing event "
"overview, schedules, sessions, speakers, and "
"sandbox demos for the Android Developer Summit "
),
)@mcp.tool(
title="List Sessions",
annotations=ToolAnnotations(
readOnlyHint=True,
destructiveHint=False,
),
meta={ … },
)
def list_sessions( … )
…def list_sessions(
track: Optional[str] = None,
location: Optional[str] = None,
) -> List[Dict[str, Any]]:
"""Lists all sessions, optionally filtered by track
(e.g. 'Tools and performance', 'Apps Foundation',
'AI experiences', 'Android XR') or location
(e.g. 'MTV', 'Mountain View', 'London', 'LON').
"""
…@mcp.tool(
…
meta={
"ui": {
"resourceUri": "ui://ads-mcp/summit-app",
},
…
},
)
def list_sessions(…)
…@mcp.resource(
"ui://ads-mcp/summit-app",
name="summit-app",
mime_type="text/html",
)
def get_summit_ui() -> ResourceResult:
"""Renders the interactive ADS 2026 dashboard."""
return ResourceResult([
ResourceContent(
_build_summit_ui_html(),
mime_type="text/html",
)
])./venv/bin/python server.py
npx @modelcontextprotocol/inspectorgcloud run deploy ads-mcp-server