apple-revcat-mcp

apple-revcat-mcp

MCP server for Claude Desktop that exposes App Store Connect and RevenueCat APIs, enabling indie iOS developers to query portfolio metrics, sales reports, subscriptions, and customer reviews directly in chat.

Category
访问服务器

README

apple-revcat-mcp

MCP server pro Claude Desktop que expõe:

  • App Store Connect API — apps, sales reports, subscription reports, subscription events, customer reviews, developer responses
  • RevenueCat API v2 — projects, apps, products, entitlements, customers, subscriptions, purchases

Pensado pra indie dev iOS que quer consultar métricas do portfólio direto no chat sem abrir 3 dashboards. Inclui tools de agregação (geo/pricing conversion, cross-app snapshot) pra decisões de campanha e pricing sem parsear TSV na mão.

Não inclui Apple Search Ads. ASA Basic não expõe API — só o dashboard ads.apple.com. Se um dia migrar pra Advanced, dá pra adicionar as tools.


1. Pré-requisitos

  • Node.js 20+
  • Claude Desktop (macOS)
  • Uma API Key do App Store Connect (.p8)
  • Uma secret key v2 do RevenueCat (sk_...)

2. Gerar credenciais

App Store Connect

  1. Vai em App Store Connect → Users and Access → Integrations → App Store Connect API
  2. Clica em Generate API Key
  3. Role: Admin (recomendado — dá acesso a reviews response) ou Finance (mínimo pra sales reports; não permite responder review)
  4. Anota:
    • Issuer ID (topo da página, formato UUID)
    • Key ID (10 caracteres, ex: AB12CD34EF)
  5. Baixa o .p8só dá pra baixar uma vez, guarda com carinho

Também precisa do Vendor Number: App Store Connect → Payments and Financial Reports → topo da página.

RevenueCat

  1. RevenueCat Dashboard → Project Settings → API Keys
  2. Cria uma v2 Secret API Key (começa com sk_) — ⚠️ não usa public/mobile key
  3. Project ID: fica na URL, em app.revenuecat.com/projects/{ESSE_ID}. Se tu tem vários projects, deixa RC_DEFAULT_PROJECT_ID vazio e passa o id nas chamadas.

3. Instalar

cd apple-revcat-mcp
npm install
npm run build

Coloca o .p8 numa pasta ignorada pelo git:

mkdir -p keys
mv ~/Downloads/AuthKey_XXXXXXXXXX.p8 keys/

O .gitignore já bloqueia keys/ E *.p8 em qualquer lugar — não vai commitar sem querer.


4. Configurar no Claude Desktop

Edita ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "apple-revcat": {
      "command": "node",
      "args": ["/CAMINHO/ABSOLUTO/apple-revcat-mcp/dist/index.js"],
      "env": {
        "ASC_KEY_ID": "AB12CD34EF",
        "ASC_ISSUER_ID": "00000000-0000-0000-0000-000000000000",
        "ASC_PRIVATE_KEY_PATH": "/CAMINHO/ABSOLUTO/apple-revcat-mcp/keys/AuthKey_AB12CD34EF.p8",
        "ASC_VENDOR_NUMBER": "12345678",
        "RC_SECRET_KEY": "sk_XXXXXXXXXXXXXXXXXXXXXXXX",
        "RC_DEFAULT_PROJECT_ID": ""
      }
    }
  }
}

Substitui /CAMINHO/ABSOLUTO/ pelo path real. Não usa ~/ — Claude Desktop não expande.

Fecha o Claude Desktop completamente (Cmd+Q) e abre de novo.


5. Testar

No Claude Desktop:

  • "Lista meus apps no App Store Connect"
  • "Quantos trials começaram ontem?"
  • "Me dá um resumo de conversão dos últimos 14 dias por país"
  • "Snapshot cross-app de ontem"
  • "Lista meus projects no RevenueCat"
  • "Snapshot do project {id}"
  • "Reviews recentes do app {id}, incluindo minhas respostas"

Um ícone 🔨 aparece no chat quando ele chama uma tool.


6. Tools disponíveis

App Store Connect (8 tools)

Tool O que faz
asc_list_apps Lista apps do dev (id, nome, bundleId, sku, primaryLocale)
asc_get_sales_report Baixa qualquer report (SALES / SUBSCRIPTION / SUBSCRIPTION_EVENT / SUBSCRIBER / PRE_ORDER) em TSV. Truncate por linha, header preservado.
asc_get_subscription_events Atalho: SUBSCRIPTION_EVENT diário. reportDate opcional (default = ontem no fuso Apple, PST).
asc_get_subscription_events_range Agrega N dias em uma chamada. daysBack: 14 ou startDate/endDate. Retorna JSON pronto ou TSV concatenado.
asc_get_geo_conversion_summary Agrega SUBSCRIPTION_EVENT por país × SKU. Retorna trials, converts, cancels, refunds e conversion rate. Feito pra validar geo targeting de campanhas ASA.
asc_list_all_apps_snapshot One-shot: apps + SALES + SUBSCRIPTION_EVENT de um dia agregados por SKU. Substitui 3 chamadas.
asc_list_customer_reviews Reviews recentes, filtro por país. Inclui developerResponse (se tu já respondeu).
asc_reply_to_review Responde review direto do chat. Requer role Admin ou Customer Support na API key. Max 5970 chars.

RevenueCat (9 tools)

Tool O que faz
rc_list_projects Lista projects da conta
rc_list_apps Apps de um project
rc_list_products SKUs configurados (paginação)
rc_list_entitlements Entitlements
rc_list_customers Lista customers (paginação via starting_after)
rc_get_customer Detalhe de um customer por app_user_id
rc_get_customer_subscriptions Subs ativas/expiradas
rc_get_customer_purchases Transactions
rc_get_project_snapshot apps + products + entitlements + 10 customers recentes em UMA chamada

⭐ = tools novos na v0.2


7. Casos de uso comuns

"Onde vale investir mais em ASA?"asc_get_geo_conversion_summary com daysBack: 14. Ordena por trials, olha conversionRate por país. País com alto trial mas baixa conversão = LTV baixo ou pricing errado.

"Cross-app comparação rápida"asc_list_all_apps_snapshot. Se algum app zerou downloads ou trials, vai aparecer óbvio.

"O que aconteceu na semana passada?"asc_get_subscription_events_range com daysBack: 7. Depois pergunta pro modelo agregar do jeito que tu quer.

"Reviews ruins pra responder"asc_list_customer_reviews filtrado por territory + includeDeveloperResponse: true. Filtra 1-2 stars sem resposta, depois asc_reply_to_review.


8. Troubleshooting

"ASC_PRIVATE_KEY_PATH is not set" — path errado ou ~/ no config. Usa caminho absoluto.

"File at X does not look like a PKCS8 PEM" — path aponta pro arquivo errado, ou o .p8 foi corrompido no download. Re-baixa do ASC.

HTTP 401 do App Store Connect — Key ID ou Issuer ID errado, ou o .p8 não corresponde. Confere as 3 coisas.

HTTP 403 no asc_reply_to_review — API key não tem role suficiente. Precisa Admin ou Customer Support.

HTTP 404 nos sales reports — Date muito recente (Apple tem ~1 dia de lag) OU vendor number errado OU não tem dados naquele dia. Tenta 2 dias atrás.

"Report not found" em datas antigas — Weekly report precisa ser um domingo. Monthly é YYYY-MM, yearly é YYYY.

RevenueCat 401 — Tá usando public/mobile key ao invés de v2 secret (sk_...). Confere o prefixo — o server checa antes de enviar.

Claude Desktop não vê o server — Cmd+Q completo? Path absoluto? Rodou npm run build? Logs em ~/Library/Logs/Claude/mcp*.log.

Debug local:

node dist/index.js

Se aparecer [apple-revcat-mcp] Ready with 17 tools. no stderr, tá tudo ok.


9. Segurança

  • O .p8 é a chave privada da tua conta Apple — nunca commita. O .gitignore bloqueia *.p8 e keys/. Se vazar, revoga IMEDIATAMENTE em ASC → Users and Access → Integrations.
  • A secret key do RevenueCat dá read completo — trata como senha.
  • Se já commitou uma .p8 sem querer, remover do último commit não basta — precisa reescrever o histórico:
    # revoga a key primeiro no dashboard, depois:
    git filter-repo --path AuthKey_XXX.p8 --invert-paths
    git push --force
    

10. Próximos passos possíveis

  • App Analytics API — impressions, page views, install source por app. É async (create job → poll → download), então gasta 2-3 chamadas. Útil pra separar orgânico vs ASA.
  • In-App Purchases + Subscriptions metadata — read/update pricing, intro offers.
  • TestFlight — builds, testers, feedback.
  • RevenueCat Metrics API — se/quando expôr MRR/churn no v2 público (hoje só via Charts privado).

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选