apple-revcat-mcp
This server acts as a unified MCP platform to access and aggregate data from Apple App Store Connect and RevenueCat, simplifying metric analysis and decision-making for iOS app portfolios.
App Store Connect - Sales & Reviews:
List all apps with basic details.
Download TSV sales and subscription reports (SALES, SUBSCRIPTION, SUBSCRIPTION_EVENT, SUBSCRIBER, PRE_ORDER) for specific dates/ranges.
Fetch subscription events (trial starts, conversions, cancellations, refunds, renewals) for a single day or up to 60-day ranges, returned as JSON or TSV.
Generate a geo/pricing conversion summary aggregating subscription events by country and SKU to evaluate campaign performance.
Get a cross-app one-day snapshot of downloads, revenue, trial starts, and conversions across all apps.
List and filter customer reviews, including developer responses, and reply to reviews directly.
App Store Analytics Reports API:
List, create (initially requires Admin role), and manage analytics report requests (ONGOING or ONE_TIME_SNAPSHOT).
List available reports by category (e.g., App Store Engagement, App Usage, Commerce, Frameworks Usage, Performance) and their report instances by processing date.
Download and parse all segments in parallel, returning deduplicated JSON or TSV.
High-level engagement funnel wrapper: impressions → product page views → downloads → conversion rate, broken down by territory and source type.
RevenueCat v2 API:
List all projects, apps within a project, products (SKUs), entitlements, and customers (with pagination).
Get detailed customer info, active/expired subscriptions, and purchase/transaction history by app_user_id.
Project snapshot: apps, products, entitlements, and a sample of recent customers in one call.
Data Aggregation & Analysis: Tools to compare geo/pricing performance, analyze acquisition funnels (e.g., for Apple Search Ads), and perform cross-app comparisons.
Security: .p8 key and RevenueCat secret key are handled as environment variables and excluded from Git commits via .gitignore to prevent leaks.
Integrates with App Store Connect API to manage apps, retrieve sales reports, subscription events, customer reviews, and respond to reviews.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@apple-revcat-mcpList my apps on App Store Connect"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
App Store Analytics Reports API — funnel de aquisição (impressions → PPV → downloads) por country × source, sessions, retention, crashes (async pipeline: create request → esperar 24-48h → puxar segments)
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, engagement funnel) 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_...)
Related MCP server: App Store Connect MCP
2. Gerar credenciais
App Store Connect
Vai em App Store Connect → Users and Access → Integrations → App Store Connect API
Clica em Generate API Key
Role:
Admin(recomendado — cobre tudo, incluindo reviews response e o primeiro create do Analytics Report Request) ouFinance/Sales and Reports(mínimo pra sales reports; não permite responder review NEM criar Analytics Report Request pela primeira vez)Anota:
Issuer ID (topo da página, formato UUID)
Key ID (10 caracteres, ex:
AB12CD34EF)
Baixa o
.p8— só 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
RevenueCat Dashboard → Project Settings → API Keys
Cria uma v2 Secret API Key (começa com
sk_) — ⚠️ não usa public/mobile keyProject ID: fica na URL, em
app.revenuecat.com/projects/{ESSE_ID}. Se tu tem vários projects, deixaRC_DEFAULT_PROJECT_IDvazio e passa o id nas chamadas.
3. Instalar
cd apple-revcat-mcp
npm install
npm run buildColoca 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.
4b. Alternativa: modo HTTP (claude.ai web/mobile)
O passo 4 acima cobre stdio (Claude Desktop). Se tu quiser plugar o MCP no claude.ai web/mobile ou usar como custom connector qualquer, precisa rodar em modo Streamable HTTP e expor a porta via túnel (cloudflared / ngrok) ou host próprio.
# 1. Copia o .env
cp .env.example .env
# 2. Preenche credenciais do ASC/RC + gera um bearer token
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# → cola no MCP_AUTH_TOKEN= dentro de .env
# 3. Sobe o servidor
npm run build
npm run start:http
# → HTTP transport listening on http://127.0.0.1:3333/mcp
# 4. Em outra aba, sobe o túnel
cloudflared tunnel --url http://localhost:3333
# → https://<random>.trycloudflare.comDepois no claude.ai: Settings → Connectors → +Add custom connector,
cola https://<random>.trycloudflare.com/mcp, e em Advanced settings
→ Request headers adiciona header Authorization com valor
Bearer <MCP_AUTH_TOKEN>.
Detalhes completos, health check, e troubleshooting em
claude_web_connector.example.md.
Notas:
Os dois modos (stdio + HTTP) coexistem: mesma build, entrypoints diferentes (
dist/index.jsvsdist/http.js). Tu pode ter os dois rodando em paralelo.Modo HTTP é stateless — cada request cria server + transport novos. Sem persistência, sem session ID.
Auth é obrigatório: se
MCP_AUTH_TOKENnão estiver setado ou tiver menos de 16 chars, o servidor recusa subir. Túnel público sem auth = suas chaves ASC/RC expostas.Credenciais ASC/RC não trafegam pelo túnel — o Claude.ai só manda chamadas MCP; a autenticação com Apple/RevenueCat sai do teu processo local direto.
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 — Sales & Reviews (8 tools)
Tool | O que faz |
| Lista apps do dev (id, nome, bundleId, sku, primaryLocale) |
| Baixa qualquer report (SALES / SUBSCRIPTION / SUBSCRIPTION_EVENT / SUBSCRIBER / PRE_ORDER) em TSV. Truncate por linha, header preservado. |
| Atalho: SUBSCRIPTION_EVENT diário. |
| Agrega N dias em uma chamada. |
| Agrega SUBSCRIPTION_EVENT por país × SKU. Retorna trials, converts, cancels, refunds e conversion rate. Feito pra validar geo targeting de campanhas ASA. |
| One-shot: apps + SALES + SUBSCRIPTION_EVENT de um dia agregados por SKU. Substitui 3 chamadas. |
| Reviews recentes, filtro por país. Inclui |
| Responde review direto do chat. Requer role Admin ou Customer Support na API key. Max 5970 chars. |
App Store Analytics Reports API (6 tools) 🆕 v0.3
Pipeline assíncrono: cria um report request → espera 24-48h → puxa reports/instances/segments → parse TSV. Distinto do Sales Report acima — traz funnel de aquisição (impressions, product page views, downloads by source × country), sessions/retention/crashes, uso de frameworks e performance. Categorias: APP_STORE_ENGAGEMENT, APP_USAGE, COMMERCE, FRAMEWORKS_USAGE, PERFORMANCE.
Tool | O que faz |
| Lista requests já criados pro app. |
| Cria request novo. Primeira criação exige role Admin. Primeiros dados chegam 24-48h depois. |
| Dado um request, lista os reports disponíveis por category (ex: "App Store Discovery and Engagement Standard"). |
| Dado um report, lista instâncias (uma por processingDate × granularity). Filtro |
| Baixa TODOS os segments de uma instância em paralelo, junta o TSV (com deduplicação de header) e retorna JSON parseado com colunas + rows, ou TSV bruto. |
| Wrapper high-level. Dado |
RevenueCat v2 (9 tools)
Tool | O que faz |
| Lista projects da conta |
| Apps de um project |
| SKUs configurados (paginação) |
| Entitlements |
| Lista customers (paginação via |
| Detalhe de um customer por |
| Subs ativas/expiradas |
| Transactions |
| apps + products + entitlements + 10 customers recentes em UMA chamada |
⭐ = wrapper high-level, sempre a primeira escolha antes de descer pra tools de baixo nível.
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.
"ASA tá ganhando auction? Onde meu app aparece pra usuário?"
→ asc_get_engagement_funnel com daysBack: 7. Cruza impressions × PPV × downloads por Territory × Source Type. Se impressions em Search estão altas mas PPV baixo = teu creative/screenshot não atrai. Se PPV alto mas downloads baixo = preço, screenshots ou descrição travam a conversão. Pré-requisito: asc_create_analytics_report_request com accessType: ONGOING (uma vez, com Admin key), esperar 24-48h. Depois roda quanto quiser.
"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.
asc_get_engagement_funnel retorna status: "no_report_request" — nunca criou um Analytics Report Request pra esse app. Roda asc_create_analytics_report_request com accessType: ONGOING uma vez (precisa Admin key na primeira vez pra cada app) e espera 24-48h. Depois asc_get_engagement_funnel responde direto.
asc_get_engagement_funnel retorna status: "created_wait_for_data" — tu passou autoCreate: true e o request acabou de ser criado. Espera 24-48h e tenta de novo.
Instances vazias (rowCount: 0) em dias recentes — Apple tem lag de 24-48h pra publicar o primeiro report ONGOING e depois +2 dias pra dados serem considerados completos. Pra dados de "ontem" ou "hoje" é normal vir vazio; tenta 3-4 dias atrás.
403 em asc_create_analytics_report_request — a key não tem role Admin. Primeira criação por app exige Admin; depois disso, Sales-and-Reports ou Finance conseguem ler.
Request em stoppedDueToInactivity: true — Apple pausou porque ninguém consumiu por muito tempo. Cria um novo com asc_create_analytics_report_request.
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.jsSe aparecer [apple-revcat-mcp] Ready with 23 tools. no stderr, tá tudo ok.
9. Segurança
O
.p8é a chave privada da tua conta Apple — nunca commita. O.gitignorebloqueia*.p8ekeys/. 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
.p8sem 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
Wrappers pra App Usage e Performance — no mesmo padrão do
asc_get_engagement_funnel, mas pras categoriasAPP_USAGE(sessions, retention, uninstalls) ePERFORMANCE(crashes por versão). Toda a plumbaria assíncrona (create → instances → segments) já tá pronta emsrc/asc/analytics.ts; só falta a agregação específica de cada dataset.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).
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceA Model Context Protocol (MCP) server for Apple's App Store Connect API. Manage your iOS, macOS, tvOS, and visionOS apps directly from Claude, Cursor, or any MCP-compatible client.529224MIT
- AlicenseAqualityCmaintenanceA Model Context Protocol (MCP) server that connects Cursor, Claude Desktop, and other MCP clients to the official App Store Connect API—so you can manage iOS/macOS apps, TestFlight, in-app subscriptions, and store metadata via chat or automated tool calls.699811MIT
- AlicenseAqualityAmaintenanceAn opinionated MCP server for App Store Connect that provides 13 curated tools, slash-command workflows, and a Claude Skill to manage apps, reviews, sales, and pre-submission audits via natural language.411,235MIT
- Alicense-qualityAmaintenanceA Model Context Protocol server that exposes the entire Apple App Store Connect API (1,200+ operations) as MCP tools, enabling AI assistants to query apps, manage builds, handle submissions, read analytics, and more.21MIT
Related MCP Connectors
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ItsJuniorDias/apple-revcat-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server