app-store-search
Search the Apple App Store to find apps by name, developer, or category. Retrieve detailed app information including pricing, descriptions, release dates, and developer data for market research and competitor analysis.
Instructions
Search for apps on the App Store. Returns a list of apps with the following fields:
id: App Store ID number
appId: Bundle ID (e.g. 'com.company.app')
title: App name
icon: Icon image URL
url: App Store URL
price: Price in USD
currency: Price currency code
free: Boolean indicating if app is free
description: App description
developer: Developer name
developerUrl: Developer's App Store URL
developerId: Developer's ID
genre: App category name
genreId: Category ID
released: Release date (ISO string)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Search term (required) | |
| num | No | Number of results to retrieve (default: 50) | |
| page | No | Page of results to retrieve (default: 1) | |
| country | No | Two letter country code (default: us) | us |
| lang | No | Language code for result text (default: en-us) | en-us |
| idsOnly | No | Skip extra lookup request. Returns array of application IDs only (default: false) |
Implementation Reference
- src/server.js:64-67 (handler)The handler function that executes the app-store-search tool logic. It calls store.search with provided parameters and returns the results as a JSON string in MCP content format.async ({ term, num, page, country, lang, idsOnly }) => { const results = await store.search({ term, num, page, country, lang, idsOnly }); return { content: [{ type: "text", text: JSON.stringify(results) }] }; }
- src/server.js:56-62 (schema)Zod schema defining the input parameters for the app-store-search tool.{ term: z.string().describe("Search term (required)"), num: z.number().default(50).describe("Number of results to retrieve (default: 50)"), page: z.number().default(1).describe("Page of results to retrieve (default: 1)"), country: z.string().default("us").describe("Two letter country code (default: us)"), lang: z.string().default("en-us").describe("Language code for result text (default: en-us)"), idsOnly: z.boolean().default(false).describe("Skip extra lookup request. Returns array of application IDs only (default: false)")
- src/server.js:39-68 (registration)Registration of the 'app-store-search' tool on the MCP server instance, including description, input schema, and inline handler.server.tool("app-store-search", "Search for apps on the App Store. Returns a list of apps with the following fields:\n" + "- id: App Store ID number\n" + "- appId: Bundle ID (e.g. 'com.company.app')\n" + "- title: App name\n" + "- icon: Icon image URL\n" + "- url: App Store URL\n" + "- price: Price in USD\n" + "- currency: Price currency code\n" + "- free: Boolean indicating if app is free\n" + "- description: App description\n" + "- developer: Developer name\n" + "- developerUrl: Developer's App Store URL\n" + "- developerId: Developer's ID\n" + "- genre: App category name\n" + "- genreId: Category ID\n" + "- released: Release date (ISO string)", { term: z.string().describe("Search term (required)"), num: z.number().default(50).describe("Number of results to retrieve (default: 50)"), page: z.number().default(1).describe("Page of results to retrieve (default: 1)"), country: z.string().default("us").describe("Two letter country code (default: us)"), lang: z.string().default("en-us").describe("Language code for result text (default: en-us)"), idsOnly: z.boolean().default(false).describe("Skip extra lookup request. Returns array of application IDs only (default: false)") }, async ({ term, num, page, country, lang, idsOnly }) => { const results = await store.search({ term, num, page, country, lang, idsOnly }); return { content: [{ type: "text", text: JSON.stringify(results) }] }; } );
- src/server.js:29-29 (helper)Import of the external app store scraper library used by the app-store-search tool handler.import store from '@jeromyfu/app-store-scraper';