google-play-search
Search Google Play Store apps to research competitors, analyze market trends, and gather app intelligence with detailed results including ratings, pricing, and developer information.
Instructions
Search for apps on Google Play. Returns a list of apps with:
title: App name
appId: Package name (e.g. 'com.company.app')
url: Play Store URL
icon: Icon image URL
developer: Developer name
developerId: Developer ID
priceText: Price display text
free: Boolean indicating if app is free
summary: Short description
scoreText: Rating display text
score: Rating (0-5)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Search term to query apps | |
| price | No | Filter by price: all, free, or paid (default: all) | all |
| num | No | Number of results to retrieve (default: 20, max: 250) | |
| 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:420-423 (handler)The handler function for the 'google-play-search' tool. It destructures the input parameters and calls gplay.search() from the '@jeromyfu/google-play-scraper' library, then returns the results as a JSON string in the expected MCP content format.async ({ term, price, num, lang, country, fullDetail }) => { const results = await gplay.search({ term, price, num, lang, country, fullDetail }); return { content: [{ type: "text", text: JSON.stringify(results) }] }; }
- src/server.js:412-419 (schema)Zod schema object defining the input parameters and their validation rules, descriptions, and defaults for the 'google-play-search' tool.{ term: z.string().describe("Search term to query apps"), price: z.enum(["all", "free", "paid"]).default("all").describe("Filter by price: all, free, or paid (default: all)"), num: z.number().default(20).describe("Number of results to retrieve (default: 20, max: 250)"), 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:399-424 (registration)The complete server.tool() call that registers the 'google-play-search' tool, including its description string, input schema, and inline handler function.server.tool("google-play-search", "Search for apps on Google Play. Returns a list of apps with:\n" + "- title: App name\n" + "- appId: Package name (e.g. 'com.company.app')\n" + "- url: Play Store URL\n" + "- icon: Icon image URL\n" + "- developer: Developer name\n" + "- developerId: Developer ID\n" + "- priceText: Price display text\n" + "- free: Boolean indicating if app is free\n" + "- summary: Short description\n" + "- scoreText: Rating display text\n" + "- score: Rating (0-5)", { term: z.string().describe("Search term to query apps"), price: z.enum(["all", "free", "paid"]).default("all").describe("Filter by price: all, free, or paid (default: all)"), num: z.number().default(20).describe("Number of results to retrieve (default: 20, max: 250)"), 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 ({ term, price, num, lang, country, fullDetail }) => { const results = await gplay.search({ term, price, num, lang, country, fullDetail }); return { content: [{ type: "text", text: JSON.stringify(results) }] }; } );