google-play-list
Retrieve detailed app listings from Google Play collections, including metadata like ratings, pricing, and developer info. Filter by category, language, and country for targeted market research and competitor analysis.
Instructions
Get apps from Google Play collections. Returns a list of apps with:
url: Play Store URL
appId: Package name (e.g., 'com.company.app')
title: App name
summary: Short description
developer: Developer name
developerId: Developer ID
icon: Icon URL
score: Rating (0-5)
scoreText: Rating display text
priceText: Price display text
free: Boolean indicating if app is free
When fullDetail is true, includes all fields from app details endpoint.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Age range filter (only for FAMILY category). Options: FIVE_UNDER, SIX_EIGHT, NINE_UP | |
| category | No | Category to filter by. Available categories: Main Categories: - APPLICATION: All applications - ANDROID_WEAR: Wear OS apps - ART_AND_DESIGN: Art & Design - AUTO_AND_VEHICLES: Auto & Vehicles - BEAUTY: Beauty - BOOKS_AND_REFERENCE: Books & Reference - BUSINESS: Business - COMICS: Comics - COMMUNICATION: Communication - DATING: Dating - EDUCATION: Education - ENTERTAINMENT: Entertainment - EVENTS: Events - FINANCE: Finance - FOOD_AND_DRINK: Food & Drink - HEALTH_AND_FITNESS: Health & Fitness - HOUSE_AND_HOME: House & Home - LIFESTYLE: Lifestyle - MAPS_AND_NAVIGATION: Maps & Navigation - MEDICAL: Medical - MUSIC_AND_AUDIO: Music & Audio - NEWS_AND_MAGAZINES: News & Magazines - PARENTING: Parenting - PERSONALIZATION: Personalization - PHOTOGRAPHY: Photography - PRODUCTIVITY: Productivity - SHOPPING: Shopping - SOCIAL: Social - SPORTS: Sports - TOOLS: Tools - TRAVEL_AND_LOCAL: Travel & Local - VIDEO_PLAYERS: Video Players - WATCH_FACE: Watch Faces - WEATHER: Weather Game Categories: - GAME: All Games - GAME_ACTION: Action Games - GAME_ADVENTURE: Adventure Games - GAME_ARCADE: Arcade Games - GAME_BOARD: Board Games - GAME_CARD: Card Games - GAME_CASINO: Casino Games - GAME_CASUAL: Casual Games - GAME_EDUCATIONAL: Educational Games - GAME_MUSIC: Music Games - GAME_PUZZLE: Puzzle Games - GAME_RACING: Racing Games - GAME_ROLE_PLAYING: Role Playing Games - GAME_SIMULATION: Simulation Games - GAME_SPORTS: Sports Games - GAME_STRATEGY: Strategy Games - GAME_TRIVIA: Trivia Games - GAME_WORD: Word Games - FAMILY: Family Games | |
| collection | No | Collection to fetch apps from (default: TOP_FREE). Available collections: - TOP_FREE: Top free applications - TOP_PAID: Top paid applications - GROSSING: Top grossing applications | TOP_FREE |
| country | No | Country code to get results from (default: us) | us |
| fullDetail | No | Include full app details in results (default: false) | |
| lang | No | Language code for result text (default: en) | en |
| num | No | Number of apps to retrieve (default: 500) |
Implementation Reference
- src/server.js:813-824 (handler)The core handler function that invokes gplay.list() with the provided parameters (collection, category, age, num, lang, country, fullDetail) to fetch the list of Google Play apps and returns the JSON-stringified results wrapped in the expected MCP response format.async ({ collection, category, age, num, lang, country, fullDetail }) => { const results = await gplay.list({ collection, category, age, num, lang, country, fullDetail }); return { content: [{ type: "text", text: JSON.stringify(results) }] }; }
- src/server.js:675-812 (schema)Zod validation schema defining the input parameters for the tool, including collection (enum), optional category (long enum list), age, num, lang, country, and fullDetail.{ collection: z.enum(['TOP_FREE', 'TOP_PAID', 'GROSSING', 'TOP_FREE_GAMES', 'TOP_PAID_GAMES', 'TOP_GROSSING_GAMES']) .default('TOP_FREE') .describe( "Collection to fetch apps from (default: TOP_FREE). Available collections:\n" + "- TOP_FREE: Top free applications\n" + "- TOP_PAID: Top paid applications\n" + "- GROSSING: Top grossing applications" ), category: z.enum([ 'APPLICATION', 'ANDROID_WEAR', 'ART_AND_DESIGN', 'AUTO_AND_VEHICLES', 'BEAUTY', 'BOOKS_AND_REFERENCE', 'BUSINESS', 'COMICS', 'COMMUNICATION', 'DATING', 'EDUCATION', 'ENTERTAINMENT', 'EVENTS', 'FINANCE', 'FOOD_AND_DRINK', 'HEALTH_AND_FITNESS', 'HOUSE_AND_HOME', 'LIBRARIES_AND_DEMO', 'LIFESTYLE', 'MAPS_AND_NAVIGATION', 'MEDICAL', 'MUSIC_AND_AUDIO', 'NEWS_AND_MAGAZINES', 'PARENTING', 'PERSONALIZATION', 'PHOTOGRAPHY', 'PRODUCTIVITY', 'SHOPPING', 'SOCIAL', 'SPORTS', 'TOOLS', 'TRAVEL_AND_LOCAL', 'VIDEO_PLAYERS', 'WATCH_FACE', 'WEATHER', 'GAME', 'GAME_ACTION', 'GAME_ADVENTURE', 'GAME_ARCADE', 'GAME_BOARD', 'GAME_CARD', 'GAME_CASINO', 'GAME_CASUAL', 'GAME_EDUCATIONAL', 'GAME_MUSIC', 'GAME_PUZZLE', 'GAME_RACING', 'GAME_ROLE_PLAYING', 'GAME_SIMULATION', 'GAME_SPORTS', 'GAME_STRATEGY', 'GAME_TRIVIA', 'GAME_WORD', 'FAMILY' ]).optional().describe( "Category to filter by. Available categories:\n" + "Main Categories:\n" + "- APPLICATION: All applications\n" + "- ANDROID_WEAR: Wear OS apps\n" + "- ART_AND_DESIGN: Art & Design\n" + "- AUTO_AND_VEHICLES: Auto & Vehicles\n" + "- BEAUTY: Beauty\n" + "- BOOKS_AND_REFERENCE: Books & Reference\n" + "- BUSINESS: Business\n" + "- COMICS: Comics\n" + "- COMMUNICATION: Communication\n" + "- DATING: Dating\n" + "- EDUCATION: Education\n" + "- ENTERTAINMENT: Entertainment\n" + "- EVENTS: Events\n" + "- FINANCE: Finance\n" + "- FOOD_AND_DRINK: Food & Drink\n" + "- HEALTH_AND_FITNESS: Health & Fitness\n" + "- HOUSE_AND_HOME: House & Home\n" + "- LIFESTYLE: Lifestyle\n" + "- MAPS_AND_NAVIGATION: Maps & Navigation\n" + "- MEDICAL: Medical\n" + "- MUSIC_AND_AUDIO: Music & Audio\n" + "- NEWS_AND_MAGAZINES: News & Magazines\n" + "- PARENTING: Parenting\n" + "- PERSONALIZATION: Personalization\n" + "- PHOTOGRAPHY: Photography\n" + "- PRODUCTIVITY: Productivity\n" + "- SHOPPING: Shopping\n" + "- SOCIAL: Social\n" + "- SPORTS: Sports\n" + "- TOOLS: Tools\n" + "- TRAVEL_AND_LOCAL: Travel & Local\n" + "- VIDEO_PLAYERS: Video Players\n" + "- WATCH_FACE: Watch Faces\n" + "- WEATHER: Weather\n\n" + "Game Categories:\n" + "- GAME: All Games\n" + "- GAME_ACTION: Action Games\n" + "- GAME_ADVENTURE: Adventure Games\n" + "- GAME_ARCADE: Arcade Games\n" + "- GAME_BOARD: Board Games\n" + "- GAME_CARD: Card Games\n" + "- GAME_CASINO: Casino Games\n" + "- GAME_CASUAL: Casual Games\n" + "- GAME_EDUCATIONAL: Educational Games\n" + "- GAME_MUSIC: Music Games\n" + "- GAME_PUZZLE: Puzzle Games\n" + "- GAME_RACING: Racing Games\n" + "- GAME_ROLE_PLAYING: Role Playing Games\n" + "- GAME_SIMULATION: Simulation Games\n" + "- GAME_SPORTS: Sports Games\n" + "- GAME_STRATEGY: Strategy Games\n" + "- GAME_TRIVIA: Trivia Games\n" + "- GAME_WORD: Word Games\n" + "- FAMILY: Family Games" ), age: z.enum(['FIVE_UNDER', 'SIX_EIGHT', 'NINE_UP']) .optional() .describe("Age range filter (only for FAMILY category). Options: FIVE_UNDER, SIX_EIGHT, NINE_UP"), num: z.number() .default(500) .describe("Number of apps to retrieve (default: 500)"), lang: z.string() .default("en") .describe("Language code for result text (default: en)"), country: z.string() .default("us") .describe("Country code to get results from (default: us)"), fullDetail: z.boolean() .default(false) .describe("Include full app details in results (default: false)") },
- src/server.js:661-825 (registration)The MCP server.tool() registration call that defines and registers the 'google-play-list' tool, including its description string, Zod input schema, and inline async handler function.server.tool("google-play-list", "Get apps from Google Play collections. Returns a list of apps with:\n" + "- url: Play Store URL\n" + "- appId: Package name (e.g., 'com.company.app')\n" + "- title: App name\n" + "- summary: Short description\n" + "- developer: Developer name\n" + "- developerId: Developer ID\n" + "- icon: Icon URL\n" + "- score: Rating (0-5)\n" + "- scoreText: Rating display text\n" + "- priceText: Price display text\n" + "- free: Boolean indicating if app is free\n\n" + "When fullDetail is true, includes all fields from app details endpoint.", { collection: z.enum(['TOP_FREE', 'TOP_PAID', 'GROSSING', 'TOP_FREE_GAMES', 'TOP_PAID_GAMES', 'TOP_GROSSING_GAMES']) .default('TOP_FREE') .describe( "Collection to fetch apps from (default: TOP_FREE). Available collections:\n" + "- TOP_FREE: Top free applications\n" + "- TOP_PAID: Top paid applications\n" + "- GROSSING: Top grossing applications" ), category: z.enum([ 'APPLICATION', 'ANDROID_WEAR', 'ART_AND_DESIGN', 'AUTO_AND_VEHICLES', 'BEAUTY', 'BOOKS_AND_REFERENCE', 'BUSINESS', 'COMICS', 'COMMUNICATION', 'DATING', 'EDUCATION', 'ENTERTAINMENT', 'EVENTS', 'FINANCE', 'FOOD_AND_DRINK', 'HEALTH_AND_FITNESS', 'HOUSE_AND_HOME', 'LIBRARIES_AND_DEMO', 'LIFESTYLE', 'MAPS_AND_NAVIGATION', 'MEDICAL', 'MUSIC_AND_AUDIO', 'NEWS_AND_MAGAZINES', 'PARENTING', 'PERSONALIZATION', 'PHOTOGRAPHY', 'PRODUCTIVITY', 'SHOPPING', 'SOCIAL', 'SPORTS', 'TOOLS', 'TRAVEL_AND_LOCAL', 'VIDEO_PLAYERS', 'WATCH_FACE', 'WEATHER', 'GAME', 'GAME_ACTION', 'GAME_ADVENTURE', 'GAME_ARCADE', 'GAME_BOARD', 'GAME_CARD', 'GAME_CASINO', 'GAME_CASUAL', 'GAME_EDUCATIONAL', 'GAME_MUSIC', 'GAME_PUZZLE', 'GAME_RACING', 'GAME_ROLE_PLAYING', 'GAME_SIMULATION', 'GAME_SPORTS', 'GAME_STRATEGY', 'GAME_TRIVIA', 'GAME_WORD', 'FAMILY' ]).optional().describe( "Category to filter by. Available categories:\n" + "Main Categories:\n" + "- APPLICATION: All applications\n" + "- ANDROID_WEAR: Wear OS apps\n" + "- ART_AND_DESIGN: Art & Design\n" + "- AUTO_AND_VEHICLES: Auto & Vehicles\n" + "- BEAUTY: Beauty\n" + "- BOOKS_AND_REFERENCE: Books & Reference\n" + "- BUSINESS: Business\n" + "- COMICS: Comics\n" + "- COMMUNICATION: Communication\n" + "- DATING: Dating\n" + "- EDUCATION: Education\n" + "- ENTERTAINMENT: Entertainment\n" + "- EVENTS: Events\n" + "- FINANCE: Finance\n" + "- FOOD_AND_DRINK: Food & Drink\n" + "- HEALTH_AND_FITNESS: Health & Fitness\n" + "- HOUSE_AND_HOME: House & Home\n" + "- LIFESTYLE: Lifestyle\n" + "- MAPS_AND_NAVIGATION: Maps & Navigation\n" + "- MEDICAL: Medical\n" + "- MUSIC_AND_AUDIO: Music & Audio\n" + "- NEWS_AND_MAGAZINES: News & Magazines\n" + "- PARENTING: Parenting\n" + "- PERSONALIZATION: Personalization\n" + "- PHOTOGRAPHY: Photography\n" + "- PRODUCTIVITY: Productivity\n" + "- SHOPPING: Shopping\n" + "- SOCIAL: Social\n" + "- SPORTS: Sports\n" + "- TOOLS: Tools\n" + "- TRAVEL_AND_LOCAL: Travel & Local\n" + "- VIDEO_PLAYERS: Video Players\n" + "- WATCH_FACE: Watch Faces\n" + "- WEATHER: Weather\n\n" + "Game Categories:\n" + "- GAME: All Games\n" + "- GAME_ACTION: Action Games\n" + "- GAME_ADVENTURE: Adventure Games\n" + "- GAME_ARCADE: Arcade Games\n" + "- GAME_BOARD: Board Games\n" + "- GAME_CARD: Card Games\n" + "- GAME_CASINO: Casino Games\n" + "- GAME_CASUAL: Casual Games\n" + "- GAME_EDUCATIONAL: Educational Games\n" + "- GAME_MUSIC: Music Games\n" + "- GAME_PUZZLE: Puzzle Games\n" + "- GAME_RACING: Racing Games\n" + "- GAME_ROLE_PLAYING: Role Playing Games\n" + "- GAME_SIMULATION: Simulation Games\n" + "- GAME_SPORTS: Sports Games\n" + "- GAME_STRATEGY: Strategy Games\n" + "- GAME_TRIVIA: Trivia Games\n" + "- GAME_WORD: Word Games\n" + "- FAMILY: Family Games" ), age: z.enum(['FIVE_UNDER', 'SIX_EIGHT', 'NINE_UP']) .optional() .describe("Age range filter (only for FAMILY category). Options: FIVE_UNDER, SIX_EIGHT, NINE_UP"), num: z.number() .default(500) .describe("Number of apps to retrieve (default: 500)"), lang: z.string() .default("en") .describe("Language code for result text (default: en)"), country: z.string() .default("us") .describe("Country code to get results from (default: us)"), fullDetail: z.boolean() .default(false) .describe("Include full app details in results (default: false)") }, async ({ collection, category, age, num, lang, country, fullDetail }) => { const results = await gplay.list({ collection, category, age, num, lang, country, fullDetail }); return { content: [{ type: "text", text: JSON.stringify(results) }] }; } );