google-play-list
Retrieve apps from Google Play collections to analyze market trends, research competitors, and understand user preferences across categories.
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.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "google-play-list"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| 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 |
| 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 | |
| age | No | Age range filter (only for FAMILY category). Options: FIVE_UNDER, SIX_EIGHT, NINE_UP | |
| num | No | Number of apps to retrieve (default: 500) | |
| lang | No | Language code for result text (default: en) | en |
| country | No | Country code to get results from (default: us) | us |
| fullDetail | No | Include full app details in results (default: false) |
Implementation Reference
- src/server.js:813-825 (handler)The handler function that implements the core logic of the 'google-play-list' tool. It destructures the input parameters and calls gplay.list from the google-play-scraper library to fetch the list of apps from the specified Google Play collection, category, etc., then returns the results as a JSON string in the 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 schema defining the input parameters and validation for the 'google-play-list' tool, including collection, category, age, num, lang, country, and fullDetail with defaults and detailed descriptions.
{ 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 registration of the 'google-play-list' tool using server.tool(), including the tool name, description string, Zod schema, and 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) }] }; } ); - src/server.js:30-30 (helper)Import of the 'gplay' library used by the google-play-list handler to perform the actual Google Play app listing via gplay.list().
import gplay from '@jeromyfu/google-play-scraper';