# Extend your app to Gemini and Search with the Connected Apps Platform - Speakers: Kateryna Semenova (Staff Developer Relations Engineer), Mai Lowe (Group Product Manager) - Track: Intelligent Apps - Video: https://www.youtube.com/watch?v=-4G-4w9FKDw - Page: https://developer.android.com/events/dev-summit/talks/extend-your-app-to-gemini-and-search-with-the-connected-apps-platform ## About the talk The new Connected Apps Platform lets you integrate your app's services directly into Gemini, AI Mode in Search, and the Android intelligence system. This session provides a practical guide to getting started. Using code examples and learning from real-life case studies, we’ll walk through the development lifecycle: building, testing, and publishing your first connected app to reach users within their AI-powered workflows. By the end of this session, you'll be able to: - Integrate your service with the Connected Apps Platform. - Test your integration across different AI surfaces. - Publish your app’s features into users' AI workflows. ## Summary - The Connected Apps Platform provides a single entry point to launch app capabilities across Gemini and Search using declarative schemas. It will open in phases, starting with a preview for US developers. - Integrations use the Model Context Protocol (MCP) standard through either remote servers or local on-device servers via the AppFunctions Jetpack library. Remote servers can also return custom UI rendered inside an iframe. - Confirmations scale with risk to protect user trust. Developers mark tools as read-only or with `destructiveHint`, helping Gemini ask for explicit confirmation when actions modify or delete data. - Gemini Developer Mode lets you inspect tool calls and latency against public endpoints. It is available now to developers in the US. - Google Connected Console handles the production rollout for approved developers. You configure endpoints, manage testers across selected surfaces, and submit your app for review. ## Resources - [Connected Apps preview sign-up](https://developers.google.com/connected-apps) - [AppFunctions integration guide](https://developer.android.com/ai/appfunctions) ## Topics gemini, search, connected-apps, mcp, appfunctions, android ## Transcript ### Introduction [00:05](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=5s) Hi, everybody. [00:06](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=6s) I'm Mai and I'm the product lead for the Gemini Connected Apps Platform. [00:11](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=11s) And later on, you're also going to hear from Kate, our DevRel engineer. [00:15](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=15s) She's going to come up. [00:16](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=16s) So, today, we're so excited to talk to you about how you can extend your app into some of Google's most popular agentic products, Gemini and Search. [00:26](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=26s) We're going to tell you how and why connected apps are helpful and magical for our users. [00:32](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=32s) And even better, we're going to show you what it takes to build one. [00:36](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=36s) So, let's dive in. [00:38](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=38s) So, I know many of us have seen that something truly massive has been happening across the app ecosystem. [00:44](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=44s) The way people use their devices, search for answers, and get things done isn't just evolving. [00:50](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=50s) It has fundamentally shifted. [00:53](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=53s) People aren't opening browsers and tapping around anymore. [00:56](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=56s) They're conversing directly with assistants like Gemini. [01:00](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=60s) They're asking Gemini complex questions, searching for answers, multi-modally on Search. [01:06](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=66s) And they're expecting the Android devices to not just understand what they're saying, but to know what they want to get done. [01:14](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=74s) Think about some of your own workflows that you can do on any given day. [01:18](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=78s) Let's say you ask Gemini to help you brainstorm some options for a fun weekend with friends in a particular place at a particular time. [01:27](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=87s) Today's models can process that plan in seconds. [01:31](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=91s) It's awesome. [01:32](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=92s) It's organized. [01:34](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=94s) And then, what? [01:36](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=96s) It ends. [01:37](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=97s) The user hits a wall and is left just hanging there with only a plan and nothing confirmed. [01:44](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=104s) The model knows what to do, but it doesn't have the hands to do it. [01:49](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=109s) So, you have to copy and paste the information from the chat with Gemini into one app or another. [01:55](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=115s) Sometimes if you're on mobile, it gets super clunky. [01:58](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=118s) You then have to remember all of the stuff and type it in afterwards. [02:03](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=123s) That cognitive leap and that friction totally breaks the magic. [02:08](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=128s) And what does that mean for all of you? [02:10](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=130s) It means you have a high-intent user demand that's stuck in a chat bubble instead of driving rich and engaging users into your app. [02:22](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=142s) And this is why connected apps are game-changing, because they help us meet our users exactly where they are. [02:30](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=150s) And right now, they're spending a large amounts of time conversing with assistants like Gemini. [02:36](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=156s) When a user expresses real intent for action, that is a critically valuable moment in their journey. [02:43](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=163s) They're not passively browsing. [02:45](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=165s) They have an explicit thing that they want to get done right now. [02:50](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=170s) By enabling integrations between apps and these generative models, assistants like Gemini go from answering questions to getting things done. [03:00](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=180s) When the user asks for prioritized to-do list, or looking to rent a car for an upcoming trip, or wanting to buy the groceries for a recipe they just found, your app isn't at the bottom of a page as a static link. [03:15](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=195s) You can help bring the magic and execute that action right then and there. [03:22](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=202s) And let me be super clear about something, because I know every developer and product leader is thinking this, connected apps is not about abstracting your app away. [03:33](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=213s) Your brand, your business logic, your authenticated relationships, and your custom UI experiences, they all belong to you. [03:43](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=223s) Connected apps are about integrating your services into an agentic API surface, so that Google's agentic products can seamlessly bring high-intent users directly into your product. ### Connected Apps Platform [03:57](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=237s) So, today, right now, I couldn't be more excited to officially announce the launch of our Connected Apps Platform. [04:06](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=246s) In the past, reaching users across Google products meant a different integration for each one. [04:12](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=252s) If you wanted an Android app action, or shortcut, you got to build one. [04:17](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=257s) A search integration, another one. [04:20](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=260s) But we want to make things as easy and awesome for you as possible. [04:25](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=265s) So, we've standardized onboarding to give you one entry point to launch your app across multiple Google agentic products. [04:33](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=273s) Now, you build your app functionality once using standard declarative schemas, and just like that, it lights up across two of our key products, Gemini and Search. [04:44](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=284s) And there's even more products coming soon, too. [04:49](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=289s) So, let's talk about this reach and what it means for you. [04:51](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=291s) You really shouldn't have to build multiple custom plugins, manage four different developer consoles, maintain various authenticated handshakes just to reach Google users across Android, Gemini, and Search. [05:05](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=305s) With our unified platform, you build and register your tool definitions once. [05:11](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=311s) You choose the Google products you want, and we give you a single launch button in our new Google Connected Console. [05:19](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=319s) When you ship, your capabilities become discoverable for anyone when they use Gemini or Search. [05:26](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=326s) Whether users typing into Gemini on their laptop, asking a series of queries on Search on the web, or using assistant features on Android, they will have the choice to use your app right when it matters the most to them, right where they are. [05:44](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=344s) So, we're going to be opening up our platform in phases, starting with our preview. [05:49](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=349s) I promise you, the whole team is working super hard to bring all the features to as many of you as fast as possible. [05:59](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=359s) For this phase of the preview, we're only opening up the platform to US developers. [06:04](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=364s) You can sign up via a form for access, and you can find that in our dev guide at developers.google.com/connected-apps, or if you're a Play developer, you could also find it in the home page of your Google Play Console. [06:22](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=382s) So, next question would be, how hard is it actually to build one of these? [06:26](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=386s) Well, if you have a REST API or Android intents, you're in a pretty good starting spot. [06:33](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=393s) We're building on top of familiar developer concepts. [06:37](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=397s) Our platform integrates with the Model Context Protocol, or MCP standard through both server-based and Android-native MCPs. [06:46](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=406s) And to make it even better and easier for you, we're launching a brand new feature in Gemini today called Developer Mode, accessible to all of you in the US right now. [06:58](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=418s) This lets you play with your app inside Gemini, get real-time feedback on error states, latency, model responses. [07:06](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=426s) And soon, you're going to be able to generate your own eval sets, get quality metric score cards and benchmarks. [07:14](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=434s) It's going to be awesome. [07:16](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=436s) No matter what your access is with the platform, you can always try your app in Developer Mode. [07:23](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=443s) I'm sure you're itching for more details, and Kate is going to come on stage right after me and talk you all through that in just a few minutes. ### Trust, privacy, and user control [07:32](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=452s) So, first, I need to talk to you about something that matters more all the time: user trust. [07:37](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=457s) Whenever we talk about agents taking action on behalf of somebody, the first question is often, "How do we keep the user in control?" [07:45](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=465s) So, here's how we look at this in a few simple concepts. [07:49](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=469s) First, our confirmations scale with risk. [07:53](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=473s) We're not going to put a pop-up in front of every tool call. [07:56](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=476s) Looking something up, checking menu availability, tracking an order, that should be frictionless. [08:02](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=482s) But when an action has real consequences, like editing something shared, completing a booking, or deleting something the user can't get back easily, that's when the model aims to ask the user for an explicit yes before it happens. [08:19](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=499s) Second, sensitive data is shown, not hidden. [08:23](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=503s) So, our products are designed to check what personal information may be shared with your app. [08:29](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=509s) If something sensitive is detected, we show the user exactly what is being shared, so let the user decide whether to move forward with your app or not right in that moment. [08:42](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=522s) Third, when we ask, we're specific. [08:45](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=525s) We don't do a vague "Are you sure?", but which app and what's actually being sent or changed. [08:52](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=532s) That way, the confirmation helps the user truly decide instead of just being something that they randomly click through. [08:59](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=539s) And because nobody wants a journey full of confirmations, users are getting more control over how often they're being asked. [09:07](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=547s) In the Gemini app, for example, users can choose per app and even per action whether to allow the action all the time or not. [09:18](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=558s) For you, all that means, we ask you to mark your tools honestly. [09:23](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=563s) Mark what's read-only, what changes, what deletes data. [09:28](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=568s) Those signals help our products decide when to bring the user in. [09:32](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=572s) And again, Kate is going to show you exactly how in just a few minutes. ### Partner experiences and path to production [09:37](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=577s) All right, so let's go back to that weekend journey that we were talking about, the planning piece. [09:43](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=583s) So, remember how hard and fragmented that was? [09:47](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=587s) You had a great plan for a group of friends, but then you hit a wall, you had to like copy-paste stuff, jumping in and out of apps. [09:54](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=594s) So, Viator and Ticketmaster are two of our early awesome partners and saw a real opportunity in meeting the user where they are. [10:04](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=604s) They decided to partner with us and lift that wall, letting this high-intent user get through to their app right from inside Gemini. [10:14](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=614s) Because of the connected apps that these partners built, the entire journey is so much more frictionless and smooth. [10:22](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=622s) So, let's take a look. [10:23](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=623s) The user connects the apps, and asks Gemini to find a daytime food tour on Viator and some concert tickets on Ticketmaster for a group of 4. [10:31](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=631s) Gemini can recognize the capability, calls on Viator and the Ticketmaster tools directly with the right group size, dates, and preferences already filled in. [10:42](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=642s) Without leaving the conversation, both apps pull back real-time availability and render rich, interactive experiences right inside the chat for the user. [10:54](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=654s) Instead of hitting that dead end and juggling a bunch of tabs, Viator and Ticketmaster are examples of partners who let users do what they need right as they figure it out, exploring food tour stops, picking concert seats, and moving totally seamlessly from discovery to action. [11:15](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=675s) So, the era of static app launchers is going away, guys, giving way to experiences that are intelligent, proactive, and agentic. [11:25](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=685s) Your users are already engaging with Search and Gemini, asking for help. [11:30](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=690s) Together, we can help them go beyond the answers and provide really powerful and magical experiences. [11:37](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=697s) And that's it for me. [11:38](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=698s) I'll hand it over to Kate now, who will walk you through exactly how to build a connected app. [11:43](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=703s) Come on up. [11:48](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=708s) Hi, everybody. [11:50](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=710s) I'm Kate, a Developer Relations Engineer, helping developers like you to integrate with Connected Apps Platform. [11:56](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=716s) So, I'm going to walk you through how to test, build, and deploy your connected app. [12:02](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=722s) And as Mai mentioned earlier, there are two primary methods to integrate with the Connected Apps Platform: either through remote MCP Server by using MCP protocol or through Android MCP, when you can build your remote MCP Server on device by using AppFunctions library. [12:20](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=740s) We recommend using remote MCP servers when you want to integrate across platforms like Android, iOS, and Web. [12:28](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=748s) And we also heard feedback from some of the developers that sometimes you prefer local execution, when your app data is available only on device. [12:36](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=756s) For this use cases, we recommend using Android MCP by using AppFunctions Jetpack library. [12:44](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=764s) And please check out the dedicated talk that where Dan and Sarah can deep dive into how to integrate with Connected Apps Platform through AppFunctions and Android MCP. ### Remote MCP server integration and demo [12:56](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=776s) Now let's explore how to build a remote MCP Server. [13:02](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=782s) And to show you how this works in practice, we built the official AndroidDevSummit connected app. [13:07](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=787s) So, let me show you how it works. [13:10](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=790s) Let's switch back to a live demo. [13:13](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=793s) So, imagine asking, "AndroidDevSummit, tell me more about XR sessions." [13:26](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=806s) Right now, Gemini connects to our MCP Server that we built for this connected app. [13:30](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=810s) It finds the right tool to call and uses its data to construct user-friendsly-- friendly response. [13:38](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=818s) So, it finds the information about XR-related sessions here for day 1 and day 2, and at the end it renders our custom branded widget for AndroidDevSummit with the Android bot. [13:54](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=834s) So, right inside Gemini, you can interact with this widget. [13:58](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=838s) You can look at the schedule, for example, you can switch the location, or maybe filter by day. [14:05](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=845s) You can also filter by different topics, like if I want to search XR-related sessions, and you can also look at the details and also look at the speakers. [14:17](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=857s) So, wooo! [14:20](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=860s) Everything inside Gemini, your custom branded experience, and users don't need to switch, users don't need to go and find some other information in a different app, everything in one place without interact-- without any switches or leaving the app itself. [14:36](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=876s) So, let's switch back to slides. ### MCP server development and custom UI [14:42](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=882s) And let's explore how to build this connected apps. [14:46](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=886s) So, it's very easy to start your MCP Server with `FastMCP` library, but there are four very important best practices to follow. [14:56](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=896s) First, you need to provide explicit server instructions. ```python 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 " ), ) ``` [15:00](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=900s) When initializing your MCP Server, always define clear instructions, describing your connected apps domain and capabilities. [15:08](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=908s) The Connected Apps Platform relies on these instructions to know when to delegate to your server. [15:13](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=913s) And additionally, Google Connected Console, that I'll show you later, also explicitly validates that these instructions are present. [15:22](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=922s) And second, add tool annotations for safety and control. ```python @mcp.tool( title="List Sessions", annotations=ToolAnnotations( readOnlyHint=True, destructiveHint=False, ), meta={ … }, ) def list_sessions( … ) … ``` [15:26](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=926s) For our ADS server, we have these two annotations. [15:30](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=930s) It's important to the model to know when your tool is read-only, or modifies data. [15:35](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=935s) So, if you have any tools that edit user information, or delete, always use this `destructiveHint` to mark them as like, they can edit or delete operations. [15:49](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=949s) And in this way, the Connected Apps Platform will know that it needs to show a confirmation message to a user, that they're okay to complete this action. [15:59](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=959s) You can also configure your tools in the Connected Google Connected Console, that I'll show you a- later. [16:08](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=968s) And third, strongly typed schemas and semantic docstrings. ```python 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'). """ … ``` [16:12](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=972s) Treat your parameter docstrings as a part of your prompt. [16:17](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=977s) In this `list_sessions` tool, we explicitly document the expected values, like tools and performance, or MTV versus London for location. [16:26](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=986s) The biggest factor in the accurate tool calling are clear and descriptive schemas. [16:32](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=992s) And the last one, UI resource metadata binding. ```python @mcp.tool( … meta={ "ui": { "resourceUri": "ui://ads-mcp/summit-app", }, … }, ) def list_sessions(…) … ``` [16:36](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=996s) Look at our UI definition in the meta. [16:39](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=999s) This metadata is the bridge that instructs Gemini to bind the tool output directly to our custom UI resource here. [16:49](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1009s) That brings us to rendering UI. ```python @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", ) ]) ``` [16:51](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1011s) The Connected Apps Platform gives you a way to render a rich user interfaces from your MCP server via MCP Apps UI. [17:00](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1020s) And when you want full flexibility for a custom, brand-expressive interface, like our Android Dev Summit, you can expose MCP UI resource. [17:10](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1030s) And the Gemini can render in a secure, sandboxed iframe. ### Testing and validation workflow [17:15](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1035s) And next, I'll walk you through testing and deployment of your Connected App, right from your local machine, straight to production. [17:24](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1044s) Yeah. [17:24](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1044s) So, let's look at how you can develop and test locally. [17:29](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1049s) During development, you can easily spin up your server locally by using the first command. ```shell ./venv/bin/python server.py npx @modelcontextprotocol/inspector ``` [17:34](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1054s) And then you can use MCP Inspector to debug your server, to see available tools, and also interact with the UI. [17:43](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1063s) This is just the example how MCP Inspector looks like for our Android Dev Summit. [17:47](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1067s) So, you can see the tools, you can see also the UI, and you can test it locally. [17:54](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1074s) Second, you would need to deploy your MCP server to some remote endpoint, to get access and also validate it in Gemini Developer Mode. [18:05](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1085s) You can host your MCP endpoint on any that infrastructure, or any cloud provider. [18:11](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1091s) But if you prefer Google Cloud, it's very simple to use with Google Cloud CLI. [18:16](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1096s) Just use this simple command to deploy and your app going to be available remotely. ```shell gcloud run deploy ads-mcp-server ``` [18:23](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1103s) The next step is to validate your public endpoint in the Gemini Developer Mode. [18:28](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1108s) So, let's switch back to a live demo, and I'll show you how to use dev mode in practice. [18:36](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1116s) So, it's easy to find the dev mode, if you just go to settings and click Developer Mode. [18:42](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1122s) Then you would need to use to choose which connected app you want to test. [18:47](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1127s) For example, you can create like a new one by just providing a MCP server URL here. [18:54](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1134s) I already created one for testing, called ADS MCP with my test endpoint. [18:59](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1139s) And I just want to test it how it works with Gemini end-to-end. [19:03](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1143s) So, let's ask something. [19:05](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1145s) "ADS MCP, tell me more about the event." [19:19](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1159s) So, right now, Gemini calls our MCP server, and also you can see what tool is being called in the Developer Mode. [19:27](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1167s) So, for example, for this specific prompt, "Tell me more about the event," the get_summit_info was called. [19:33](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1173s) And you can see also the response that was successful. [19:37](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1177s) And you can see latency. [19:38](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1178s) You can also see all the request and response details. [19:42](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1182s) So, for example, for our response, we have a lot of information. [19:46](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1186s) You can also zoom it a little bit and just see how, like, debug maybe what information you need, and explore that everything is accurate. [19:56](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1196s) You can also copy it, which is very convenient, if you want to share with your teammate. [20:00](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1200s) And you can also export the entire event log and share if needed. [20:07](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1207s) What I also like that you can also explore other tools that are available, so here in the Developer Mode you can see get summit info, list session, and other tools. [20:18](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1218s) And you can also change the environment to simulate different user contexts. [20:23](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1223s) For example, you can change the daytime, or preferences like languages, and you can also set up the authentication. [20:32](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1232s) So, this was the Dev Mode. [20:34](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1234s) And yeah, you can start building your MCP Server today, and ex-- test it with the Dev Mode, starting today. [20:41](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1241s) It's available to everybody right now. [20:46](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1246s) And let's switch back to slides. [20:49](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1249s) Okay. [20:52](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1252s) So, let's say you already tested with Dev Mode, everything looks great, what do you do next? [20:57](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1257s) You need to sign up for access to get access to our platform, and you need to fill in this interest form first. [21:07](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1267s) It's also available in our documentation and the in the Google Connected Console. ### Preparing for production and resources [21:13](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1273s) And once your submission is approved, you will get access to the Google Connected Console where you can prepare your application for production roll out. [21:23](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1283s) Inside the console, it takes just few steps to prepare your app. [21:27](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1287s) First, you need to create a new Connected App there and provide a name. [21:33](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1293s) And then you just need to select the capabilities and like category. [21:37](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1297s) For example, for this example we selected productivity, and just click create. [21:44](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1304s) Next, under app details, you need to provide public data like display name, the icon, and also provide user facing description as well as your app capabilities, limitations, example prompts, and other data. [22:00](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1320s) And then when you configure your MCP Server, you need to provide your endpoint. [22:05](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1325s) You need to verify that this domain belongs to you, and also you can configure credentials to sync tools. [22:12](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1332s) Keep in mind that Google Console takes a snapshot of your MCP schema, so whenever you make changes to your schema, you would need to go back and redeploy. [22:23](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1343s) And after that, you can just configure your app availability. [22:26](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1346s) You can choose what regions your app should be available, languages, surfaces, and other individual tool configurations. [22:35](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1355s) From there you can just press push changes, and submit for Gemini stage review. [22:44](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1364s) And then you can also add test accounts under manage testers. [22:48](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1368s) And immediately test it live with this test accounts on web, mobile, or any surfaces that you selected before like Gemini or Search, and then submit it for final preview. [23:02](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1382s) And once your app is ready, you can just roll out it to production globally to your users or like selected regions by just sending submitting that button. [23:14](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1394s) And that's it! [23:15](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1395s) We're excited to see what you can build with the Connected Apps Platform, whether you're exposing your app capabilities through Remote MCP Server or through Android MCP. [23:25](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1405s) We're would be happy to support you to build this amazing integrations. [23:30](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1410s) Just follow this documentation and our samples that are available by using this barcode. [23:36](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1416s) And thank you so much for joining us today! [23:39](https://www.youtube.com/watch?v=-4G-4w9FKDw&t=1419s) Happy coding!