应用商店数据抓取服务

一个提供苹果App Store和Google Play商店数据抓取功能的MCP服务器,支持21种工具,无需认证即可访问公开数据。

  • by guiguito
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 guiguito/AppStoreScraperMCP

使用说明

应用商店抓取器MCP服务器

MCP(模型上下文协议)服务器,将Apple App Store和Google Play Store的抓取功能作为21种工具公开。将其连接到任何兼容MCP的客户端(Claude Desktop、Cursor等),让LLM搜索、浏览和分析来自两个商店的移动应用程序。

建在上面 应用商店scraper ts 和 谷歌play scraper ts.

特性

  • 21个只读工具 涵盖苹果应用商店(10个工具)和谷歌应用商店(11个工具)
  • 双重运输:stdio(用于本地MCP客户端)和Streamable HTTP(用于远程访问)
  • 不要求进行验证 --所有数据在商店里都是公开的
  • Docker就绪 采用多阶段生产构建
  • 完整记录 带有Zod验证、枚举描述和内联示例的工具模式

快速开始

先决条件

  • Node.js>=18

安装和构建

npm install
npm run build

跑

标准运输 (默认值——适用于Claude Desktop、Cursor等):

npm start

HTTP传输 (远程/网络访问):

node dist/index.js --http
# or
TRANSPORT=http npm start

HTTP服务器侦听 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 之一 --
appId string id/appId -- 捆绑标识符之一
country string no -- 两个字母的ISO国家代码
lang string no -- IETF语言标记

apple_reviews

获取分页的客户评论。

参数 类型 必填 默认 说明
id string id/appId 之一 --
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

许可证

麻省理工学院