지능형 앱

연결된 앱 플랫폼을 사용하여 Gemini 및 Google 검색으로 앱 확장하기

스피커

  • Kateryna Semenova

    개발자 관계팀 엔지니어

  • 마이 로우

    그룹 제품 관리자

정보

강연 소개

새로운 연결된 앱 플랫폼을 사용하면 앱의 서비스를 Gemini, Google 검색의 AI 모드, Android 인텔리전스 시스템에 직접 통합할 수 있습니다. 이 세션에서는 시작하기 위한 실용적인 가이드를 제공합니다. 코드 예시를 사용하고 실제 우수사례를 통해 학습하면서 개발 수명 주기를 살펴봅니다. 첫 번째 연결된 앱을 빌드, 테스트, 게시하여 AI 기반 워크플로 내에서 사용자에게 도달하는 방법을 알아봅니다.

이 세션의 목표는 다음과 같습니다.

  • 서비스를 연결된 앱 플랫폼과 통합합니다.
  • 다양한 AI 표시 경로에서 통합을 테스트합니다.
  • 앱의 기능을 사용자의 AI 워크플로에 게시하세요.

요약

  • 연결된 앱 플랫폼은 선언적 스키마를 사용하여 Gemini 및 Google 검색에서 앱 기능을 실행할 수 있는 단일 진입점을 제공합니다. 미국 개발자를 위한 프리뷰를 시작으로 단계적으로 공개될 예정입니다.
  • 통합은 원격 서버 또는 AppFunctions Jetpack 라이브러리를 통한 로컬 온디바이스 서버를 통해 모델 컨텍스트 프로토콜 (MCP) 표준을 사용합니다. 원격 서버는 iframe 내에서 렌더링된 맞춤 UI를 반환할 수도 있습니다.
  • 사용자 신뢰를 보호하기 위해 위험에 따라 확인 규모가 조정됩니다. 개발자는 도구를 읽기 전용으로 표시하거나 destructiveHint로 표시하여 Gemini가 작업을 통해 데이터를 수정하거나 삭제할 때 명시적인 확인을 요청하도록 할 수 있습니다.
  • Gemini 개발자 모드를 사용하면 공개 엔드포인트에 대한 도구 호출과 지연 시간을 검사할 수 있습니다. 현재 미국 개발자가 사용할 수 있습니다.
  • Google Connected Console은 승인된 개발자를 위해 프로덕션 출시를 처리합니다. 엔드포인트를 구성하고, 선택한 표시 경로에서 테스터를 관리하고, 검토를 위해 앱을 제출합니다.

리소스

Gemini Notebook

주제

  • gemini
  • 검색
  • connected-apps
  • mcp
  • appfunctions
  • Android

스크립트

소개

  • 여러분 안녕하세요?

  • 저는 Gemini 연결된 앱 플랫폼의 제품 책임자인 마이입니다.

  • 그리고 DevRel 엔지니어인 케이트의 세션도 준비되어 있습니다.

  • 올라올 거야.

  • 그래서 오늘은 Google의 가장 인기 있는 에이전트형 제품인 Gemini와 Google 검색으로 앱을 확장하는 방법을 소개해 드리려고 합니다.

  • 연결된 앱이 사용자에게 어떻게 도움이 되고 얼마나 유용한지 알려드리겠습니다.

  • 더 좋은 점은, 이를 구축하는 데 필요한 사항을 보여드리겠다는 것입니다.

  • 시작해 보겠습니다

  • 앱 생태계 전반에서 엄청난 변화가 일어나고 있다는 사실을 많은 분이 알고 계실 것입니다.

  • 사람들이 기기를 사용하고, 답을 찾고, 작업을 처리하는 방식은 단순히 진화하는 것이 아닙니다.

  • 근본적으로 바뀌었습니다.

  • 사람들은 더 이상 브라우저를 열고 탭을 클릭하지 않습니다.

  • Gemini와 같은 어시스턴트와 직접 대화하고 있습니다.

  • 사용자들은 Google 검색에서 Gemini에게 복잡한 질문을 하고, 멀티모달 방식으로 답변을 검색하고 있습니다.

  • 또한 Android 기기가 사용자의 말을 이해하는 것을 넘어 사용자가 원하는 작업을 파악하기를 기대합니다.

  • 하루 동안 수행할 수 있는 워크플로를 생각해 보세요.

  • 특정 장소에서 특정 시간에 친구들과 함께 즐거운 주말을 보낼 수 있는 옵션을 브레인스토밍하는 데 도움을 달라고 Gemini에게 요청한다고 가정해 보겠습니다.

  • 오늘날의 모델은 이 계획을 몇 초 만에 처리할 수 있습니다.

  • 정말 멋집니다.

  • 체계적입니다.

  • 그다음은 어떻게 될까요?

  • 종료됩니다.

  • 사용자는 난관에 부딪히고 계획만 있을 뿐 아무것도 확정되지 않은 상태로 남게 됩니다.

  • 모델은 무엇을 해야 하는지 알고 있지만 이를 수행할 손이 없습니다.

  • 따라서 Gemini와의 채팅에서 정보를 복사하여 다른 앱에 붙여넣어야 합니다.

  • 모바일에서는 가끔 너무 불편할 때가 있습니다.

  • 그런 다음 모든 내용을 기억하고 나중에 입력해야 합니다.

  • 이러한 인지적 도약과 마찰은 마법을 완전히 깨뜨립니다.

  • 이것이 여러분에게 어떤 의미가 있을까요?

  • 이는 구매 의도가 높은 사용자가 앱으로 유입되지 않고 채팅 풍선에 머물러 있다는 의미입니다.

  • 이것이 바로 연결된 앱이 판도를 바꾸는 이유입니다. 사용자가 있는 곳에서 바로 사용자를 만날 수 있기 때문입니다.

  • 그리고 현재 Gemini와 같은 어시스턴트와 대화하는 데 많은 시간을 보내고 있습니다.

  • 사용자가 행동에 대한 실제 의도를 표현하는 순간은 사용자 여정에서 매우 중요한 순간입니다.

  • 수동적으로 탐색하지 않습니다.

  • 지금 당장 하고 싶은 명확한 일이 있습니다.

  • 앱과 이러한 생성 모델 간의 통합을 사용 설정하면 Gemini와 같은 어시스턴트가 질문에 답변하는 것에서 나아가 작업을 처리할 수 있습니다.

  • 사용자가 우선순위가 지정된 할 일 목록을 요청하거나, 예정된 여행을 위해 자동차를 렌트하거나, 방금 찾은 레시피의 식료품을 구매하려고 할 때 앱이 페이지 하단에 정적 링크로 표시되지 않습니다.

  • 이때 마법 같은 경험을 선사하고 바로 그 자리에서 조치를 취할 수 있습니다.

  • 모든 개발자와 제품 리더가 생각하고 있는 점을 분명히 말씀드리자면, 연결된 앱은 앱을 추상화하는 것이 아닙니다.

  • 브랜드, 비즈니스 로직, 인증된 관계, 맞춤 UI 환경은 모두 여러분의 것입니다.

  • 연결된 앱은 서비스를 에이전트 API 표면에 통합하여 Google의 에이전트 제품이 구매 의도가 높은 사용자를 제품으로 원활하게 직접 유도할 수 있도록 하는 것입니다.

연결된 앱 플랫폼

  • 오늘 이 자리에서 연결된 앱 플랫폼의 출시를 공식적으로 발표하게 되어 매우 기쁩니다.

  • 과거에는 Google 제품 전반에서 사용자에게 도달하려면 각 제품에 대해 서로 다른 통합이 필요했습니다.

  • Android 앱 작업이나 바로가기를 원한다면 직접 빌드해야 했습니다.

  • 검색 통합입니다.

  • 하지만 Google은 최대한 쉽고 멋진 경험을 제공하고자 합니다.

  • 따라서 Google은 온보딩을 표준화하여 여러 Google 에이전트 제품에서 앱을 실행할 수 있는 단일 진입점을 제공합니다.

  • 이제 표준 선언적 스키마를 사용하여 앱 기능을 한 번만 빌드하면 Google의 두 가지 주요 제품인 Gemini와 Google 검색에서 바로 사용할 수 있습니다.

  • 곧 더 많은 제품이 출시될 예정입니다.

  • 이러한 도달범위와 이것이 크리에이터에게 어떤 의미가 있는지 살펴보겠습니다.

  • Android, Gemini, Google 검색에서 Google 사용자에게 도달하기 위해 여러 개의 맞춤 플러그인을 빌드하고, 4개의 서로 다른 개발자 콘솔을 관리하고, 다양한 인증된 핸드셰이크를 유지할 필요가 없습니다.

  • 통합 플랫폼을 사용하면 도구 정의를 한 번만 빌드하고 등록하면 됩니다.

  • 원하는 Google 제품을 선택하면 Google의 새로운 Google Connected Console에서 단일 실행 버튼을 제공합니다.

  • 기능을 출시하면 누구나 Gemini 또는 Google 검색을 사용할 때 해당 기능을 검색할 수 있습니다.

  • 사용자가 노트북에서 Gemini에 입력하거나, 웹의 Google 검색에서 일련의 검색어를 입력하거나, Android에서 어시스턴트 기능을 사용할 때, 가장 중요한 순간에 바로 그 자리에서 앱을 사용할 수 있습니다.

  • 따라서 프리뷰를 시작으로 플랫폼을 단계적으로 공개할 예정입니다.

  • YouTube팀은 최대한 많은 크리에이터에게 최대한 빨리 모든 기능을 제공하기 위해 최선을 다하고 있습니다.

  • 이 프리뷰 단계에서는 미국 개발자에게만 플랫폼을 공개합니다.

  • 액세스 권한을 얻으려면 양식을 통해 가입해야 합니다. 양식은 developers.google.com/connected-apps의 개발자 가이드에서 찾을 수 있으며, Play 개발자인 경우 Google Play Console 홈페이지에서도 찾을 수 있습니다.

  • 그렇다면 다음 질문은, 실제로 이런 것을 만드는 것이 얼마나 어려운가요?

  • REST API 또는 Android 인텐트가 있다면 좋은 출발점이 될 수 있습니다.

  • 익숙한 개발자 개념을 기반으로 빌드하고 있습니다.

  • Google의 플랫폼은 서버 기반 MCP와 Android 네이티브 MCP를 통해 모델 컨텍스트 프로토콜(MCP) 표준과 통합됩니다.

  • 또한 오늘 Gemini에 개발자 모드라는 새로운 기능을 출시하여 더욱 편리하게 사용할 수 있도록 했습니다. 이 기능은 현재 미국에서 누구나 사용할 수 있습니다.

  • 이를 통해 Gemini 내에서 앱을 사용해 보고 오류 상태, 지연 시간, 모델 응답에 관한 실시간 피드백을 받을 수 있습니다.

  • 곧 자체 평가 세트를 생성하고 품질 측정항목 스코어카드와 벤치마크를 얻을 수 있게 됩니다.

  • 정말 멋질 거예요.

  • 플랫폼에 대한 액세스 권한과 관계없이 언제든지 개발자 모드에서 앱을 사용해 볼 수 있습니다.

  • 더 자세한 내용을 알고 싶으실 텐데요. 제가 발표를 마치면 케이트가 무대에 올라 몇 분 동안 자세히 설명해 드릴 예정입니다.

신뢰, 개인 정보 보호, 사용자 제어

  • 먼저, 항상 중요한 주제인 사용자 신뢰에 대해 이야기해 보겠습니다.

  • 에이전트가 누군가를 대신해 작업을 수행하는 것에 관해 이야기할 때 가장 먼저 나오는 질문은 '사용자가 어떻게 제어권을 유지할 수 있는가?'입니다.

  • 몇 가지 간단한 개념을 통해 이를 살펴보겠습니다.

  • 첫째, Google의 확인은 위험에 따라 확장됩니다.

  • 모든 도구 호출 앞에 팝업을 표시하지는 않습니다.

  • 무언가를 검색하고, 메뉴를 확인하고, 주문을 추적하는 과정은 원활해야 합니다.

  • 하지만 공유 항목 수정, 예약 완료, 사용자가 쉽게 복구할 수 없는 항목 삭제와 같이 실제 결과가 발생하는 작업의 경우 모델은 작업이 실행되기 전에 사용자에게 명시적인 동의를 요청합니다.

  • 둘째, 민감한 정보가 숨겨지지 않고 표시됩니다.

  • 따라서 Google 제품은 앱과 공유될 수 있는 개인 정보를 확인하도록 설계되었습니다.

  • 민감한 정보가 감지되면 사용자에게 공유되는 내용을 정확하게 표시하여 사용자가 그 순간에 앱을 계속 사용할지 여부를 결정할 수 있도록 합니다.

  • 셋째, 요청할 때는 구체적으로 요청합니다.

  • '계속하시겠습니까?'와 같은 모호한 질문 대신 어떤 앱이 무엇을 전송하거나 변경하는지 명확하게 알려줍니다.

  • 이렇게 하면 확인 메시지가 사용자가 무작위로 클릭하는 것이 아니라 실제로 결정하는 데 도움이 됩니다.

  • 또한 확인 요청이 너무 많으면 사용자가 불편을 느끼므로, 사용자가 요청 빈도를 더 세부적으로 관리할 수 있게 됩니다.

  • 예를 들어 Gemini 앱에서 사용자는 앱별로, 심지어 작업별로도 작업을 항상 허용할지 여부를 선택할 수 있습니다.

  • 따라서 도구를 정직하게 표시해 주시기 바랍니다.

  • 읽기 전용, 변경, 데이터 삭제를 표시합니다.

  • 이러한 신호는 제품이 사용자를 언제 참여시킬지 결정하는 데 도움이 됩니다.

  • 잠시 후 케이트가 정확한 방법을 보여드릴 것입니다.

파트너 환경 및 프로덕션 경로

  • 좋습니다. 그럼 앞서 이야기했던 주말 여행 계획으로 돌아가 보겠습니다.

  • 얼마나 어렵고 파편화되어 있었는지 기억하시나요?

  • 친구들과 함께할 멋진 계획을 세웠지만, 복사하여 붙여넣기하고 앱을 넘나들어야 하는 등 난관에 부딪혔습니다.

  • Viator와 Ticketmaster는 초기 파트너로서 사용자가 있는 곳에서 사용자를 만나는 데서 진정한 기회를 발견했습니다.

  • 이들은 Google과 협력하여 장벽을 허물고, 구매 의도가 높은 사용자가 Gemini 내에서 바로 앱에 액세스할 수 있도록 했습니다.

  • 이러한 파트너가 구축한 연결된 앱 덕분에 전체 여정이 훨씬 더 원활하고 매끄럽게 진행됩니다.

  • 그럼 살펴보겠습니다.

  • 사용자가 앱을 연결하고 Gemini에게 Viator에서 낮 시간대 음식 투어를 찾고 Ticketmaster에서 4인용 콘서트 티켓을 찾아 달라고 요청합니다.

  • Gemini는 이 기능을 인식하고 Viator 및 Ticketmaster 도구를 직접 호출하여 적절한 그룹 규모, 날짜, 환경설정을 이미 입력한 상태로 제공할 수 있습니다.

  • 두 앱 모두 대화를 종료하지 않고도 실시간 예약 가능 여부를 가져와 채팅 내에서 사용자에게 풍부한 대화형 환경을 렌더링합니다.

  • Viator와 Ticketmaster는 사용자가 여러 탭을 오가며 막다른 길에 부딪히는 대신, 음식 투어 장소를 탐색하고 콘서트 좌석을 선택하는 등 필요한 작업을 즉시 수행하고 탐색에서 액션으로 원활하게 전환할 수 있도록 지원하는 파트너의 예입니다.

  • 정적인 앱 런처의 시대는 가고 지능적이고 선제적이며 에이전트 중심의 경험이 그 자리를 대신하고 있습니다.

  • 사용자는 이미 Google 검색과 Gemini를 사용하며 도움을 요청하고 있습니다.

  • Google과 함께라면 단순한 답변을 넘어 강력하고 마법 같은 경험을 제공할 수 있습니다.

  • 이상입니다.

  • 이제 케이트가 연결된 앱을 빌드하는 방법을 자세히 안내해 드리겠습니다.

  • 올라오세요.

  • 여러분 안녕하세요?

  • 저는 개발자 관계 엔지니어인 케이트입니다. 여러분과 같은 개발자가 연결된 앱 플랫폼과 통합할 수 있도록 지원하고 있습니다.

  • 연결된 앱을 테스트, 빌드, 배포하는 방법을 안내해 드리겠습니다.

  • 앞서 마이가 언급했듯이 연결된 앱 플랫폼과 통합하는 방법에는 두 가지가 있습니다. MCP 프로토콜을 사용하여 원격 MCP 서버를 통해 통합하거나, AppFunctions 라이브러리를 사용하여 기기에서 원격 MCP 서버를 빌드할 수 있는 Android MCP를 통해 통합하는 것입니다.

  • Android, iOS, 웹과 같은 플랫폼 간에 통합하려면 원격 MCP 서버를 사용하는 것이 좋습니다.

  • 또한 앱 데이터가 기기에서만 사용 가능한 경우 로컬 실행을 선호한다는 일부 개발자의 의견도 있었습니다.

  • 이 사용 사례의 경우 AppFunctions Jetpack 라이브러리를 사용하여 Android MCP를 사용하는 것이 좋습니다.

  • 댄과 사라가 AppFunctions 및 Android MCP를 통해 연결된 앱 플랫폼과 통합하는 방법을 심층적으로 다루는 전용 강연도 확인해 보세요.

원격 MCP 서버 통합 및 데모

  • 이제 원격 MCP 서버를 빌드하는 방법을 살펴보겠습니다.

  • 이 기능이 실제로 어떻게 작동하는지 보여드리기 위해 공식 AndroidDevSummit 연결 앱을 빌드했습니다.

  • 그럼 어떻게 작동하는지 보여드리겠습니다.

  • 라이브 데모로 다시 전환해 보겠습니다.

  • "AndroidDevSummit, XR 세션에 대해 자세히 알려 줘"라고 질문한다고 가정해 보겠습니다.

  • 이제 Gemini가 이 연결된 앱을 위해 빌드한 MCP 서버에 연결됩니다.

  • 호출할 적절한 도구를 찾고 해당 데이터를 사용하여 사용자 친화적인 대답을 구성합니다.

  • 따라서 1일 차와 2일 차의 XR 관련 세션에 관한 정보를 찾고 마지막에는 Android 로봇과 함께 AndroidDevSummit의 맞춤 브랜드 위젯을 렌더링합니다.

  • Gemini 내에서 바로 이 위젯과 상호작용할 수 있습니다.

  • 일정을 확인하고, 위치를 전환하거나, 날짜별로 필터링할 수 있습니다.

  • XR 관련 세션을 검색하고 싶은 경우와 같이 다양한 주제로 필터링할 수도 있으며, 세부정보와 발표자도 확인할 수 있습니다.

  • 정말 기쁩니다.

  • Gemini 내의 모든 기능, 맞춤 브랜드 환경, 사용자는 전환할 필요가 없고, 다른 앱에서 다른 정보를 찾을 필요가 없으며, 상호작용 없이 한곳에서 모든 것을 처리할 수 있습니다. 전환하거나 앱 자체를 나갈 필요가 없습니다.

  • 그럼 슬라이드로 돌아가겠습니다.

MCP 서버 개발 및 커스텀 UI

  • 이러한 연결된 앱을 빌드하는 방법을 살펴보겠습니다.

  • 따라서 FastMCP 라이브러리를 사용하면 MCP 서버를 매우 쉽게 시작할 수 있지만, 따라야 할 매우 중요한 권장사항이 네 가지 있습니다.

  • 먼저 명시적인 서버 안내를 제공해야 합니다.

    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 서버를 초기화할 때는 항상 연결된 앱의 도메인과 기능을 설명하는 명확한 요청 사항을 정의하세요.

  • 연결된 앱 플랫폼은 이러한 요청 사항을 기반으로 서버에 위임할 시점을 파악합니다.

  • 또한 나중에 보여드릴 Google Connected Console에서도 이러한 안내가 있는지 명시적으로 확인합니다.

  • 두 번째는 안전과 제어를 위해 도구 주석을 추가하는 것입니다.

    @mcp.tool(
        title="List Sessions",
    
        annotations=ToolAnnotations(
            readOnlyHint=True,
            destructiveHint=False,
        ),
    
        meta={ … },
    )
    def list_sessions( … )
    …
  • ADS 서버에는 다음 두 가지 주석이 있습니다.

  • 도구가 읽기 전용인지 또는 데이터를 수정하는지 모델이 아는 것이 중요합니다.

  • 따라서 사용자 정보를 수정하거나 삭제하는 도구가 있는 경우 항상 이 destructiveHint를 사용하여 수정 또는 삭제 작업을 표시하세요.

  • 이렇게 하면 연결된 앱 플랫폼은 사용자에게 이 작업을 완료해도 괜찮은지 확인하는 메시지를 표시해야 한다는 것을 알게 됩니다.

  • Connected Google Connected Console에서 도구를 구성할 수도 있습니다. 이 내용은 나중에 보여드리겠습니다.

  • 세 번째는 강력한 유형의 스키마와 시맨틱 docstring입니다.

    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').
        """
        …
  • 파라미터 docstring을 프롬프트의 일부로 취급합니다.

  • 이 list_sessions 도구에서는 도구 및 실적, 위치(MTV 또는 런던)와 같은 예상 값을 명시적으로 문서화합니다.

  • 정확한 도구 호출에서 가장 중요한 요소는 명확하고 설명이 포함된 스키마입니다.

  • 마지막으로 UI 리소스 메타데이터 바인딩입니다.

    @mcp.tool(
        …
        meta={
            "ui": {
                "resourceUri": "ui://ads-mcp/summit-app",
            },
            …
        },
    )
    def list_sessions(…)
    …
  • 메타의 UI 정의를 살펴보세요.

  • 이 메타데이터는 Gemini가 도구 출력을 커스텀 UI 리소스에 직접 바인딩하도록 지시하는 가교 역할을 합니다.

  • 이제 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",
            )
        ])
  • 연결된 앱 플랫폼을 사용하면 MCP 앱 UI를 통해 MCP 서버에서 풍부한 사용자 인터페이스를 렌더링할 수 있습니다.

  • Android Dev Summit과 같이 브랜드를 표현하는 맞춤 인터페이스를 위해 완전한 유연성이 필요한 경우 MCP UI 리소스를 노출할 수 있습니다.

  • Gemini는 안전한 샌드박스 iframe에서 렌더링할 수 있습니다.

테스트 및 검증 워크플로

  • 다음으로 로컬 머신에서 바로 프로덕션으로 연결된 앱을 테스트하고 배포하는 방법을 안내해 드리겠습니다.

  • 네.

  • 로컬에서 개발하고 테스트하는 방법을 살펴보겠습니다.

  • 개발 중에 첫 번째 명령어를 사용하여 로컬에서 서버를 쉽게 가동할 수 있습니다.

    ./venv/bin/python server.py
    npx @modelcontextprotocol/inspector
  • 그런 다음 MCP Inspector를 사용하여 서버를 디버그하고, 사용 가능한 도구를 확인하고, UI와 상호작용할 수 있습니다.

  • 이것은 Android Dev Summit에서 MCP Inspector가 어떻게 보이는지 보여주는 예입니다.

  • 도구와 UI를 확인하고 로컬에서 테스트할 수 있습니다.

  • 둘째, Gemini 개발자 모드에서 액세스하고 검증하려면 MCP 서버를 원격 엔드포인트에 배포해야 합니다.

  • 모든 인프라 또는 클라우드 제공업체에서 MCP 엔드포인트를 호스팅할 수 있습니다.

  • 하지만 Google Cloud를 선호하는 경우 Google Cloud CLI를 사용하면 매우 간단합니다.

  • 이 간단한 명령어를 사용하여 배포하면 앱을 원격으로 사용할 수 있습니다.

    gcloud run deploy ads-mcp-server
  • 다음 단계는 Gemini 개발자 모드에서 공개 엔드포인트를 검증하는 것입니다.

  • 이제 라이브 데모로 돌아가서 개발 모드를 실제로 사용하는 방법을 보여드리겠습니다.

  • 따라서 설정으로 이동하여 개발자 모드를 클릭하면 개발자 모드를 쉽게 찾을 수 있습니다.

  • 그런 다음 테스트할 연결된 앱을 선택해야 합니다.

  • 예를 들어 여기에서 MCP 서버 URL을 제공하여 새 서버를 만들 수 있습니다.

  • 테스트를 위해 테스트 엔드포인트가 있는 ADS MCP라는 엔드포인트를 이미 만들었습니다.

  • Gemini와 엔드 투 엔드로 어떻게 작동하는지 테스트해 보고 싶습니다.

  • 그럼 질문을 해보겠습니다.

  • "ADS MCP, 이벤트에 대해 자세히 알려 줘."

  • 지금 Gemini가 MCP 서버를 호출하고 있으며, 개발자 모드에서 어떤 도구가 호출되고 있는지 확인할 수 있습니다.

  • 예를 들어 이 특정 프롬프트인 '이벤트에 대해 자세히 알려줘'의 경우 get_summit_info가 호출되었습니다.

  • 성공적인 응답도 확인할 수 있습니다.

  • 지연 시간도 확인할 수 있습니다.

  • 모든 요청 및 응답 세부정보도 확인할 수 있습니다.

  • 예를 들어 응답에는 많은 정보가 포함되어 있습니다.

  • 또한 약간 확대하여 필요한 정보를 디버그하고 모든 정보가 정확한지 확인할 수 있습니다.

  • 복사할 수도 있으므로 팀원과 공유하려는 경우 매우 편리합니다.

  • 필요한 경우 전체 이벤트 로그를 내보내고 공유할 수도 있습니다.

  • 또한 사용 가능한 다른 도구를 살펴볼 수 있다는 점도 마음에 듭니다. 여기 개발자 모드에서 서밋 정보, 세션 목록, 기타 도구를 확인할 수 있습니다.

  • 또한 환경을 변경하여 다양한 사용자 컨텍스트를 시뮬레이션할 수 있습니다.

  • 예를 들어 시간대나 언어와 같은 환경설정을 변경할 수 있으며 인증을 설정할 수도 있습니다.

  • 지금까지 개발 모드에 대해 알아봤습니다.

  • 오늘부터 MCP 서버를 빌드하고 개발 모드로 테스트할 수 있습니다.

  • 현재 모든 사용자가 이용할 수 있습니다.

  • 슬라이드로 돌아가겠습니다.

  • 좋습니다.

  • 개발 모드로 이미 테스트를 완료했고 모든 것이 정상적으로 작동한다고 가정해 보겠습니다. 다음 단계는 무엇일까요?

  • 플랫폼에 액세스하려면 액세스 권한을 신청해야 하며, 먼저 이 신청 양식을 작성해야 합니다.

  • 문서와 Google Connected Console에서도 확인할 수 있습니다.

프로덕션 및 리소스 준비

  • 제출이 승인되면 Google Connected Console에 액세스하여 프로덕션 출시를 위해 애플리케이션을 준비할 수 있습니다.

  • 콘솔에서 몇 단계만 거치면 앱을 준비할 수 있습니다.

  • 먼저 새 연결된 앱을 만들고 이름을 지정해야 합니다.

  • 그런 다음 기능과 카테고리를 선택하면 됩니다.

  • 예를 들어 이 예시에서는 생산성을 선택하고 만들기를 클릭합니다.

  • 다음으로 앱 세부정보에서 표시 이름, 아이콘과 같은 공개 데이터를 제공하고 사용자 대상 설명과 앱 기능, 제한사항, 프롬프트 예시, 기타 데이터를 제공해야 합니다.

  • 그런 다음 MCP 서버를 구성할 때 엔드포인트를 제공해야 합니다.

  • 이 도메인이 본인 소유인지 확인해야 하며 동기화 도구에 사용자 인증 정보를 구성할 수도 있습니다.

  • Google Console은 MCP 스키마의 스냅샷을 생성하므로 스키마를 변경할 때마다 다시 배포해야 합니다.

  • 그런 다음 앱 사용 가능 여부를 구성하면 됩니다.

  • 앱을 사용할 수 있는 지역, 언어, 표시 경로, 기타 개별 도구 구성을 선택할 수 있습니다.

  • 여기에서 변경사항 푸시를 누르고 Gemini 단계 검토를 위해 제출하면 됩니다.

  • 테스터 관리에서 테스트 계정을 추가할 수도 있습니다.

  • 그리고 웹, 모바일 또는 Gemini나 Google 검색과 같이 이전에 선택한 모든 표시 경로에서 이 테스트 계정으로 즉시 실시간 테스트를 진행한 후 최종 프리뷰를 위해 제출합니다.

  • 앱이 준비되면 버튼을 제출하여 전 세계 사용자 또는 선택한 지역에 프로덕션으로 출시할 수 있습니다.

  • 이상입니다

  • 원격 MCP 서버를 통해 앱 기능을 노출하든 Android MCP를 통해 노출하든, 연결된 앱 플랫폼으로 무엇을 빌드할지 기대됩니다.

  • 이 멋진 통합을 구축할 수 있도록 최선을 다해 지원해 드리겠습니다.

  • 이 문서와 이 바코드를 사용하여 제공되는 샘플을 따르세요.

  • 오늘 함께해 주셔서 감사합니다.

  • 즐겁게 코딩해 보세요!

코드

코드 스니펫

'MCP 서버 개발 및 맞춤 UI'의 14:56에 나오는 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 "
    ),
)
'MCP 서버 개발 및 맞춤 UI'의 15:22에 나오는 Python 스니펫
@mcp.tool(
    title="List Sessions",

    annotations=ToolAnnotations(
        readOnlyHint=True,
        destructiveHint=False,
    ),

    meta={ … },
)
def list_sessions( … )
…
'MCP 서버 개발 및 맞춤 UI'의 16:08에 나오는 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').
    """
    …
'MCP 서버 개발 및 커스텀 UI'의 16:32에 나오는 Python 스니펫
@mcp.tool(
    …
    meta={
        "ui": {
            "resourceUri": "ui://ads-mcp/summit-app",
        },
        …
    },
)
def list_sessions(…)
…
'MCP 서버 개발 및 커스텀 UI'의 16:49에 나오는 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",
        )
    ])
'테스트 및 검증 워크플로'의 17:29에 있는 셸 스니펫
./venv/bin/python server.py
npx @modelcontextprotocol/inspector
'테스트 및 검증 워크플로'의 18:16에 있는 셸 스니펫
gcloud run deploy ads-mcp-server