应用商店抓取器MCP服务器
MCP(模型上下文协议)服务器,将Apple App Store和Google Play Store的抓取功能作为21种工具公开。将其连接到任何兼容MCP的客户端(Claude Desktop、Cursor等),让LLM搜索、浏览和分析来自两个商店的移动应用程序。
特性
- 21个只读工具 涵盖苹果应用商店(10个工具)和谷歌应用商店(11个工具)
- 双重运输:stdio(用于本地MCP客户端)和Streamable HTTP(用于远程访问)
- 不要求进行验证 --所有数据在商店里都是公开的
- Docker就绪 采用多阶段生产构建
- 完整记录 带有Zod验证、枚举描述和内联示例的工具模式
快速开始
先决条件
- Node.js>=18
安装和构建
npm install
npm run build跑
标准运输 (默认值——适用于Claude Desktop、Cursor等):
npm startHTTP传输 (远程/网络访问):
node dist/index.js --http
# or
TRANSPORT=http npm startHTTP服务器侦听 http://localhost:3000/mcp 默认情况下。设置 PORT 要更改它的环境变量:
PORT=8080 node dist/index.js --http开发模式 (自动重新加载):
npm run dev客户端配置
克劳德桌面/光标(stdio)
添加到MCP客户端配置中:
{
"mcpServers": {
"app-store-scraper": {
"command": "node",
"args": ["/absolute/path/to/dist/index.js"]
}
}
}远程HTTP客户端
将您的MCP客户端指向:
http://localhost:3000/mcp请求必须包含标题:
Accept: application/json, text/event-stream超文本传输安全协议
服务器本身讲简单的HTTP——TLS终止由它前面的反向代理处理。这是标准的生产模式,并将证书管理与应用程序代码分开。
卡迪 (最简单的--自动Let’s Encrypt证书):
# Caddyfile
mcp.example.com {
reverse_proxy localhost:3000
}奔跑 caddy run Caddy将自动获取并更新TLS证书。
引擎X:
server {
listen 443 ssl;
server_name mcp.example.com;
ssl_certificate /etc/letsencrypt/live/mcp.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mcp.example.com/privkey.pem;
location /mcp {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}使用 证书机器人 从Let's Encrypt获取证书。
Cloudflare 隧道 (无需开放端口):
cloudflared tunnel --url http://localhost:3000这暴露了服务器下的 *.trycloudflare.com 带有自动HTTPS的URL,不需要域或证书。对于永久子域,请在Cloudflare仪表板中配置一个命名隧道。
Docker+Caddy (单个组合堆栈):
# docker-compose.yml
services:
mcp:
build: .
expose:
- "3000"
caddy:
image: caddy:2
ports:
- "443:443"
- "80:80"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
depends_on:
- mcp
volumes:
caddy_data:# Caddyfile
mcp.example.com {
reverse_proxy mcp:3000
}然后,您的MCP客户端连接到 https://mcp.example.com/mcp.
码头工人
构建
docker build -t app-store-scraper-mcp .跑
docker run -p 3000:3000 app-store-scraper-mcp自定义端口:
docker run -p 8080:8080 -e PORT=8080 app-store-scraper-mcp默认情况下,Docker镜像以HTTP传输模式运行。
工具参考
所有工具都是 只读, 幂等,并向公共应用商店端点发出请求。不需要API密钥。
______________________________________________________________________
苹果应用商店工具
apple_app
检索单个应用程序的详细信息。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
id | string | id/appId | -- | 数字应用商店id之一(例如。 "553834731") |
appId | string | id/appId | -- | 捆绑标识符之一(例如。 "com.midasplayer.apps.candycrushsaga") |
country | string | 否 | "us" | 两个字母的ISO国家代码 |
lang | string | no | -- | IETF语言标签(例如。 "en-us", "fr-fr") |
ratings | boolean | 否 | -- | 包括总评分计数和星级直方图 |
退货: 完整的应用程序对象,包括标题、描述、图标、截图、价格、分数、评级、版本、发行说明、开发者信息、流派、内容评级、支持的设备等。
______________________________________________________________________
apple_ratings
获取总评分计数和星级分布直方图。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
id | string | yes | -- | 数字应用商店ID |
country | string | 否 | "us" | 两个字母的ISO国家代码 |
退货: { ratings: number, histogram: { "1": number, "2": number, "3": number, "4": number, "5": number } }
______________________________________________________________________
apple_list
浏览排名靠前的应用程序集合(免费、付费、新、总收入等)。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
collection | enum | no | -- | 集合键(请参见 苹果系列) |
category | string | no | -- | 类别键(请参见 苹果分类) |
country | string | 否 | "us" | 两个字母的ISO国家代码 |
lang | string | no | -- | IETF语言标记 |
num | 编号 | 否 | 50 | 结果数量(1-200) |
fullDetail | boolean | no | -- | 返回完整的App对象,而不是轻量级的AppSite |
______________________________________________________________________
apple_search
按关键字搜索应用程序。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
term | string | 是 | -- | 搜索查询 |
num | 编号 | 否 | 50 | 每页结果(1-200) |
page | 编号 | 否 | 1 | 页码(从1开始) |
country | string | 否 | "us" | 两个字母的ISO国家代码 |
lang | string | 否 | "en-us" | 接受语言标头值 |
idsOnly | boolean | no | -- | 仅返回应用程序ID,而不是完整对象 |
______________________________________________________________________
apple_developer
按特定开发人员列出所有应用程序。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
devId | string | yes | -- | 苹果开发者ID(例如。 "284882218" Facebook) |
country | string | 否 | "us" | 两个字母的ISO国家代码 |
lang | string | no | -- | IETF语言标记 |
______________________________________________________________________
apple_suggest
获取自动完成的搜索建议。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
term | string | yes | -- | 部分搜索查询 |
country | string | 否 | "us" | 两个字母的ISO国家代码 |
退货: 数组 { term: string } 建议对象。
______________________________________________________________________
apple_similar
获取“客户也购买了”相关应用程序。
| 参数 | 类型 | 必填 | 默认 | 说明 | |
|---|---|---|---|---|---|
id | string | id/appId | 之一 | -- | 数字应用商店id |
appId | string | id/appId | -- | 捆绑标识符之一 | |
country | string | no | -- | 两个字母的ISO国家代码 | |
lang | string | no | -- | IETF语言标记 |
______________________________________________________________________
apple_reviews
获取分页的客户评论。
| 参数 | 类型 | 必填 | 默认 | 说明 | |
|---|---|---|---|---|---|
id | string | id/appId | 之一 | -- | 数字应用商店id |
appId | string | id/appId | -- | 捆绑标识符之一 | |
sort | enum | 否 | RECENT | 排序顺序(参见 苹果排序) | |
page | 编号 | 否 | 1 | 页码(1-10,苹果规定的限制) | |
country | string | 否 | "us" | 两个字母的ISO国家代码 | |
fullDetail | boolean | 否 | false | 如果为true,则返回包含所有字段的完整原始Review对象 |
退货: 默认情况下,一组经过筛选的Review对象,包含基本字段:id、版本、用户名、分数、标题、文本、已更新。当 fullDetail 如果为true,则返回完整的原始Review对象,包括userUrl、url和所有其他字段。
______________________________________________________________________
apple_privacy
获取应用程序隐私/应用程序跟踪透明度详细信息。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
id | string | yes | -- | 数字应用商店ID |
country | string | 否 | "US" | 大写ISO国家代码 |
退货: PrivacyDetails对象,带有managePrivacyChoicesUrl、privacyTypes数组(数据类别、目的)。
______________________________________________________________________
apple_version_history
获取带有发布说明的版本发布历史记录。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
id | string | yes | -- | 数字应用商店ID |
country | string | 否 | "US" | 大写ISO国家代码 |
退货: 数组 { versionDisplay, releaseNotes, releaseDate, releaseTimestamp }.
______________________________________________________________________
Google Play商店工具
google_app
获取单个应用程序的详细信息。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
appId | string | yes | -- | 包标识符(例如。 "com.spotify.music") |
lang | string | 否 | "en" | 存储UI语言 |
country | string | 否 | "us" | 店面国家代码 |
退货: 完整的AppDetails对象,包括标题、描述、分数、评级、直方图、安装、价格、IAP信息、图标、屏幕截图、视频、开发人员详细信息、版本、Android版本、内容评级、流派、类别和可用性标志。
______________________________________________________________________
google_list
浏览精心策划的应用程序图表(免费排行榜、付费排行榜、总收入排行榜)。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
collection | enum | no | -- | 图表标识符(请参见 谷歌收藏) |
category | string | no | -- | 类别键(请参见 谷歌分类) |
age | enum | no | -- | 年龄范围筛选器(请参见 谷歌年龄范围) |
lang | string | 否 | "en" | 元数据区域设置 |
country | string | 否 | "us" | 店面区域 |
num | 编号 | 否 | 60 | 最多输入(1-500) |
fullDetail | boolean | 否 | false | 获取每个条目的完整AppDetails(速度较慢) |
______________________________________________________________________
google_search
按关键字搜索Google Play目录。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
term | string | 是 | -- | 搜索查询 |
lang | string | 否 | "en" | 元数据语言 |
country | string | 否 | "us" | 店面所在国家 |
num | 编号 | 否 | 20 | 请求的结果(最多250个,谷歌上限约60个) |
fullDetail | boolean | 否 | false | 获取每个结果的完整AppDetails |
price | enum | 否 | "all" | 价格筛选器: "all", "free",或 "paid" |
______________________________________________________________________
google_search_global
通过以下方式进行传统全球订阅源搜索 /work/search 终点。返回地理中立的结果。参数与 google_search.
______________________________________________________________________
google_suggest
获取自动完成的搜索建议。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
term | string | yes | -- | 部分搜索查询 |
lang | string | 否 | "en" | 建议语言 |
country | string | 否 | "us" | 店面所在国家 |
退货: 建议字符串数组。
______________________________________________________________________
google_developer
列出特定开发人员发布的应用程序。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
devId | string | yes | -- | 开发人员ID或slug(例如。 "Spotify AB", "5700313618786177705") |
lang | string | 否 | "en" | 元数据区域设置 |
country | string | 否 | "us" | 店面所在国家 |
num | 编号 | 否 | 20 | 最大结果(1-250) |
fullDetail | boolean | 否 | false | 获取每个应用程序的完整AppDetails |
______________________________________________________________________
google_reviews
检索分页的用户评论。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
appId | string | yes | -- | 包标识符 |
lang | string | 否 | "en" | UI语言 |
country | string | 否 | "us" | 店铺所在国家 |
num | 编号 | 否 | 20 | 每批结果(1-250) |
sort | enum | no | -- | 排序顺序(请参见 谷歌排序) |
paginate | boolean | 否 | false | 启用分页(返回 nextPaginationToken) |
nextPaginationToken | string | no | -- | 上一次调用下一页的令牌 |
fullDetail | boolean | 否 | false | 如果为true,则返回包含所有字段的完整原始Review对象 |
退货: { data: Review[], nextPaginationToken: string | null }默认情况下,每个Review只包含基本字段:id、用户名、日期、分数、文本、版本。当 fullDetail 为true,包括所有字段:userImage、replyDate、replyText、thumbsUp、url等。
______________________________________________________________________
google_similar
获取给定应用程序的“类似应用程序”。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
appId | string | yes | -- | 包标识符 |
lang | string | 否 | "en" | 元数据语言 |
country | string | 否 | "us" | 店面区域 |
num | 编号 | 否 | 20 | 最大结果(1-100) |
fullDetail | boolean | 否 | false | 获取每个应用程序的完整AppDetails |
______________________________________________________________________
google_permissions
检查应用程序请求的运行时权限。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
appId | string | yes | -- | 包标识符 |
lang | string | 否 | "en" | UI语言 |
country | string | 否 | "us" | 店铺所在国家 |
shortOnly | boolean | 否 | false | 仅返回权限名称字符串 |
退货: 数组 { permission, type } 对象(或扁平字符串数组,当 shortOnly 是真的)。
______________________________________________________________________
google_datasafety
获取数据安全/隐私披露。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
appId | string | yes | -- | 包标识符 |
lang | string | 否 | "en" | UI语言 |
country | string | 否 | "us" | 店铺所在国家 |
退货: { sharedData, collectedData, securityPractices, privacyPolicyUrl }.
______________________________________________________________________
google_categories
列出所有可用的Google Play类别标识符。不接受任何参数。
退货: 类别字符串数组(例如。 ["APPLICATION", "GAME_ACTION", ...]).
______________________________________________________________________
枚举参考
苹果系列
将密钥名称作为 collection 参数:
| 密钥 | 描述 |
|---|---|
TOP_FREE_IOS | 热门免费iPhone应用 |
TOP_FREE_IPAD | 热门免费iPad应用 |
TOP_PAID_IOS | 热门付费iPhone应用 |
TOP_PAID_IPAD | 热门付费iPad应用 |
TOP_GROSSING_IOS | 收入最高的iPhone应用程序 |
TOP_GROSSING_IPAD | 收入最高的iPad应用程序 |
NEW_IOS | 新iPhone应用程序 |
NEW_IPAD | 新iPad应用程序 |
Apple排序值
| 密钥 | 描述 |
|---|---|
RECENT | 最新评论优先 |
HELPFUL | 最有帮助的评论优先 |
苹果分类
将密钥名称作为 category 参数:
顶层: GAMES, BUSINESS, EDUCATION, ENTERTAINMENT, FINANCE, FOOD_AND_DRINK, HEALTH_AND_FITNESS, LIFESTYLE, MEDICAL, MUSIC, NAVIGATION, NEWS, PHOTO_AND_VIDEO, PRODUCTIVITY, REFERENCE, SHOPPING, SOCIAL_NETWORKING, SPORTS, TRAVEL, UTILITIES, WEATHER, BOOKS, CATALOGS
游戏子类别: GAMES_ACTION, GAMES_ADVENTURE, GAMES_ARCADE, GAMES_BOARD, GAMES_CARD, GAMES_CASINO, GAMES_DICE, GAMES_EDUCATIONAL, GAMES_FAMILY, GAMES_MUSIC, GAMES_PUZZLE, GAMES_RACING, GAMES_ROLE_PLAYING, GAMES_SIMULATION, GAMES_SPORTS, GAMES_STRATEGY, GAMES_TRIVIA, GAMES_WORD
谷歌收藏
| 密钥 | 描述 |
|---|---|
TOP_FREE | 热门免费应用 |
TOP_PAID | 热门付费应用 |
GROSSING | 最赚钱的应用程序 |
谷歌排序值
| 密钥 | 描述 |
|---|---|
NEWEST | 最近第一次 |
RATING | 排名第一 |
HELPFULNESS | 最有帮助的第一 |
谷歌年龄范围
| 密钥 | 描述 |
|---|---|
FIVE_UNDER | 5岁及以下 |
SIX_EIGHT | 6-8岁 |
NINE_UP | 9岁及以上 |
谷歌分类
概述: APPLICATION, ANDROID_WEAR, BUSINESS, COMMUNICATION, EDUCATION, ENTERTAINMENT, LIFESTYLE, PRODUCTIVITY, SHOPPING, SOCIAL, TOOLS, WEATHER
内容: ART_AND_DESIGN, BOOKS_AND_REFERENCE, COMICS, MUSIC_AND_AUDIO, NEWS_AND_MAGAZINES, PHOTOGRAPHY, VIDEO_PLAYERS
专业的: AUTO_AND_VEHICLES, BEAUTY, DATING, EVENTS, FINANCE, FOOD_AND_DRINK, HEALTH_AND_FITNESS, HOUSE_AND_HOME, LIBRARIES_AND_DEMO, MAPS_AND_NAVIGATION, MEDICAL, PARENTING, PERSONALIZATION, SPORTS, TRAVEL_AND_LOCAL, WATCH_FACE, FAMILY
游戏: 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
使用 google_categories 工具在运行时显示完整的动态列表。
项目结构
src/
index.ts # Entry point, transport selection, Express HTTP server
utils.ts # Shared response helpers (jsonResult, errorResult)
tools/
apple.ts # 10 Apple App Store tools
google.ts # 11 Google Play Store tools
Dockerfile # Multi-stage production build
tsconfig.json # TypeScript configuration许可证
麻省理工学院
