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).
Available Tools
17 toolsasc_get_geo_conversion_summaryA
Aggregates the last N days of SUBSCRIPTION_EVENT data by country and SKU. Returns rows with { country, sku, trialStarts, conversions, cancels, refunds, conversionRate }. Use this to compare geo/pricing performance across the paid campaigns (Apple Search Ads or otherwise). Defaults to 7 days. Skips days Apple hasn't published yet (won't fail on partial availability).
| Name | Required | Description | Default |
|---|---|---|---|
| daysBack | No | ||
| minTrials | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses default daysBack and handling of missing data. However, it does not mention idempotency, read-only nature, or any side effects. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no wasted words. Front-loaded with purpose, then usage, then behavior. Perfectly sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes output format partially but omits details like whether data is cumulative or per-day, how conversionRate is calculated, or pagination. Adequate for simple tool but could be more complete given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only daysBack is explained (default 7 days). minTrials is not described at all despite 0% schema description coverage. The description partially compensates for one parameter but fully misses the other.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool aggregates SUBSCRIPTION_EVENT data by country and SKU, listing the returned fields. It distinguishes from sibling tools that likely return raw events (e.g., asc_get_subscription_events).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states to use this for comparing geo/pricing performance across paid campaigns. Does not include explicit exclusions, but the purpose and context with siblings imply when not to use (raw events).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asc_get_sales_reportA
Download a sales/subscription report as TSV.
reportDate format: YYYY-MM-DD (daily), YYYY-MM-DD ending Sunday (weekly), YYYY-MM (monthly), YYYY (yearly).
reportType SALES = downloads + gross revenue by SKU.
reportType SUBSCRIPTION = active subscription state on that date.
reportType SUBSCRIPTION_EVENT = trial starts, conversions, cancels, renewals.
reportType SUBSCRIBER = per-subscriber ledger. Apple has ~1 day lag; request yesterday, not today. Reports are aggregated in America/Los_Angeles.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Report version. Only set if you need a specific one. | |
| maxLines | No | Truncate to this many lines (header preserved). | |
| frequency | No | DAILY | |
| reportDate | Yes | YYYY-MM-DD for daily/weekly (Sunday for weekly), YYYY-MM for monthly, YYYY for yearly. | |
| reportType | No | SALES | |
| reportSubType | No | SUMMARY |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses timezone (America/Los_Angeles), Apple's data lag, and truncation via maxLines. It does not explicitly state the tool is read-only, but the context implies it. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with bullet points, front-loaded with purpose, and each sentence adds value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters and no output schema, the description covers purpose, date formats, report types, lag, and timezone. It lacks details on maxLines truncation behavior beyond header preservation, but is otherwise comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%. The description adds value for reportDate format and reportType meanings, but does not explain version, maxLines, frequency, or reportSubType. Baseline of 3 is appropriate as the description partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Download a sales/subscription report as TSV' and lists report types and date formats. It does not explicitly differentiate from sibling tools like asc_get_subscription_events, but the purpose is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use each reportType (SALES for downloads+revenue, SUBSCRIPTION for active subscriptions, etc.) and mentions Apple's 1-day lag. It does not provide explicit when-not-to-use or alternatives, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asc_get_subscription_eventsA
Convenience wrapper: fetches the SUBSCRIPTION_EVENT report for one day. Shows trial starts, conversions, cancels, refunds, renewals per SKU and country. If reportDate is omitted, defaults to yesterday in Apple's timezone (America/Los_Angeles).
| Name | Required | Description | Default |
|---|---|---|---|
| reportDate | No | YYYY-MM-DD (defaults to yesterday in Apple's timezone). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the default date behavior (yesterday in Apple's timezone) and output contents, but lacks information on read-only nature, authorization requirements, or rate limits. No annotations are provided to supplement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no filler: purpose, output contents, and default behavior. Every sentence adds necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool without an output schema, the description adequately explains the return format (per SKU and country) and default behavior, making it effectively complete for use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides full description of the single parameter, but the tool description adds explicit timezone name (America/Los_Angeles) and clarifies default behavior, offering marginal added value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it fetches the SUBSCRIPTION_EVENT report for one day, specifying what data it shows (trial starts, conversions, cancels, etc.) and distinguishing from sibling asc_get_subscription_events_range by limiting scope to a single day.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes the tool as a convenience wrapper for a single day, implying use for daily reports, but does not explicitly state when not to use it or mention the alternative range tool. The sibling name provides implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asc_get_subscription_events_rangeA
Fetch SUBSCRIPTION_EVENT reports for a range of days and concatenate them. Use daysBack=N for the last N days ending yesterday, OR startDate + endDate (YYYY-MM-DD, inclusive). Max 60 days per call. Returns JSON rows (with a synthesized reportDate column) by default so downstream aggregation is easy; pass format=tsv for the raw concat.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | json | |
| endDate | No | YYYY-MM-DD, inclusive. | |
| daysBack | No | Alternative to startDate/endDate: last N days ending yesterday. | |
| startDate | No | YYYY-MM-DD, inclusive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors (default JSON with reportDate column, tsv for raw, max 60 days). However, it omits error handling, authentication needs, or what happens if date range is invalid. More transparency would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences that front-load the purpose and then detail usage. Every sentence earns its place without any redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity (4 params, no output schema, no annotations), the description covers the essential information: purpose, parameter alternatives, constraints, and output format. It is largely complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the description adds value by explaining the effect of format (JSON for aggregation, tsv for raw) and clarifying the relationship between daysBack and startDate/endDate. This compensates for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches and concatenates SUBSCRIPTION_EVENT reports for a range of days. This distinct purpose is differentiated from the sibling asc_get_subscription_events, which likely handles single events or days.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on using daysBack versus startDate/endDate, a maximum of 60 days, and the format parameter's impact. However, it does not explicitly say when to avoid this tool or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asc_list_all_apps_snapshotA
Cross-app one-day snapshot. Fetches yesterday's SALES + SUBSCRIPTION_EVENT reports (they're vendor-scoped, not per app) and merges with your app list so you see downloads, revenue, trial starts, and conversions per app in a single response. Skip reportDate to use yesterday in Apple's timezone.
| Name | Required | Description | Default |
|---|---|---|---|
| reportDate | No | YYYY-MM-DD (defaults to yesterday in Apple's timezone). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses that reports are vendor-scoped and merged, and that default date is yesterday in Apple's timezone. Provides adequate behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff. Each sentence provides distinct value: definition, functionality, and usage tip. Well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema and no annotations, description explains what data is fetched and what fields are returned. Sufficient for an agent to understand tool's purpose and output. Could be more explicit about response structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (reportDate) with schema description covering its format and default. Description adds 'skip reportDate to use yesterday' which aligns with schema. At 100% schema coverage, baseline 3 applies; no additional semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly describes a cross-app snapshot that fetches sales and subscription events and merges with app list. Distinguishes from siblings like asc_list_apps, asc_get_sales_report, asc_get_subscription_events by combining multiple data sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States to skip reportDate for default yesterday's data, implying use case. Does not explicitly mention when not to use or alternative tools, but context makes it clear for combined data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asc_list_appsA
List all apps in your App Store Connect account. Returns id, name, bundleId, sku, primaryLocale. Use this first to discover appIds for other tools (reviews, analytics).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It discloses returned fields but does not mention rate limits, pagination, or authentication requirements. Acceptable for a simple listing tool, but could be improved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no superfluous words. Front-loaded with action and returns. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, description covers purpose, return fields, and usage hint. Lacks mention of pagination or result set limits, but generally complete for a simple list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no parameters, and schema coverage is trivially 100%. Description adds no parameter info, but none is needed. Baseline score for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists apps from App Store Connect account, specifies returned fields (id, name, bundleId, sku, primaryLocale), and indicates its primary use case of discovering appIds for other tools, which distinguishes it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this first to discover appIds for other tools', providing clear usage context. However, it does not mention when not to use it or discuss alternatives like asc_list_all_apps_snapshot or rc_list_apps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asc_list_customer_reviewsA
Get recent customer reviews for a specific app, sorted newest-first. Includes the developer response (if any) when includeDeveloperResponse is true.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | App id (from asc_list_apps). | |
| limit | No | ||
| territory | No | Optional two-letter country code (e.g. US, BR, GB). | |
| includeDeveloperResponse | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It states the sorting order and optional developer response inclusion, but omits details on pagination, rate limits, error handling, or authentication requirements. The description is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences) and front-loaded with the primary action. Each sentence adds distinct information, with no unnecessary words. Excellent structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should give more detail about returned data. It mentions reviews and developer responses but not fields like rating or text. The limit and territory parameters are not explained thoroughly, leaving gaps for an agent to understand full behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%; the description adds meaning for includeDeveloperResponse and implies appId usage, but does not explain the limit or territory parameters. It provides some value beyond the schema but does not fully compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves customer reviews for a specific app, sorted newest-first, and distinguishes itself from siblings like asc_reply_to_review (which modifies) and asc_list_apps (which lists apps). The verb 'get' and resource 'customer reviews' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when seeking recent reviews for an app, but does not explicitly provide when-not-to-use or mention alternatives. However, the context (sibling tools) and clear purpose make it obvious; no guidance is needed beyond what is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asc_reply_to_reviewA
Post a developer response to a customer review. Creates a NEW response — Apple does not allow overwriting a submitted response through this endpoint. Requires the ASC API key to have Admin or Customer Support role.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Response text (max 5970 chars, Apple limit). | |
| reviewId | Yes | id from asc_list_customer_reviews |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description carries burden. Discloses creation-only nature and role requirements, but could add more detail (e.g., behavior on duplicate submissions, rate limits). Adequate for a simple action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. Critical info is front-loaded: purpose, constraint, permission requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with no output schema, description covers core aspects. Could mention possible error conditions or response, but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions. Description adds context for reviewId (source in asc_list_customer_reviews) and confirms body max chars. Adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (Post) and resource (developer response to a customer review), distinguishing it from sibling tools like asc_list_customer_reviews. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly notes that the endpoint creates a new response and cannot overwrite, and requires Admin or Customer Support role. Does not explicitly contrast with alternatives, but the constraint is valuable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_get_customerA
Get details for a single customer by app_user_id.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | RevenueCat project id. If omitted, RC_DEFAULT_PROJECT_ID from env is used. | |
| customer_id | Yes | The app_user_id (or RevenueCat customer id) of the customer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, placing the burden on the description. The description only states the tool fetches details but does not disclose behavior like read-only nature, error handling (e.g., missing customer), response size, or anything about side effects. This is insufficient for an agent to predict behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 10 words, front-loading the core purpose. Every word is necessary; there is no redundancy or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description should compensate by indicating what 'details' includes (e.g., customer info, entitlements, transactions). It fails to do so, leaving the agent without understanding the return value structure or any limitations. The tool's complexity is low (2 params), but behavioral context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters are described). The description adds value by clarifying that 'project_id' can be omitted to use a default from environment, and that 'customer_id' can be either app_user_id or RevenueCat customer ID. This goes beyond the schema's generic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get details') and the resource ('single customer'), and specifies the identifier ('by app_user_id'). This effectively distinguishes it from siblings like 'rc_list_customers' (list vs single) and 'rc_get_customer_purchases' (details vs purchases).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing details for one customer, but provides no explicit guidance on when to use this tool versus alternatives (e.g., why not use 'rc_get_customer_purchases' or 'rc_get_customer_subscriptions'). No when-not-to-use or fallback instructions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_get_customer_purchasesB
Get all purchases (transactions) for a customer.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | RevenueCat project id. If omitted, RC_DEFAULT_PROJECT_ID from env is used. | |
| customer_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description only states 'get all purchases' without disclosing behavioral traits such as pagination, rate limits, or whether the tool is read-only. Minimal disclosure for a data retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence is concise and front-loaded with verb and resource, but could include essential details without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple two-parameter tool, but lacks details on output format, parameter defaults (project_id uses env var), and any constraints. Meets minimum completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (project_id documented, customer_id not). The tool description adds no extra meaning to parameters; missing customer_id format or validation details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves all purchases/transactions for a specific customer, distinguishing it from sibling tools like rc_get_customer_subscriptions (subscriptions only) and rc_get_customer (general info).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., rc_get_customer_subscriptions), no prerequisites or when-not-to-use information provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_get_customer_subscriptionsB
Get all active and expired subscriptions for a customer.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | RevenueCat project id. If omitted, RC_DEFAULT_PROJECT_ID from env is used. | |
| customer_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It mentions 'active and expired' subscriptions, which is useful, but omits side effects, authentication needs, rate limits, or error handling. For a read operation, it fails to explicitly confirm it is safe and non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded, and contains no extraneous information. It effectively communicates the core purpose in minimal space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should ideally mention response format or any pagination. It misses details on what the returned subscriptions contain. However, the tool is simple with two parameters, so the gap is moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema describes project_id with default behavior, but customer_id has no description. The tool description adds no extra info about parameters beyond the schema, and with 50% coverage, it does not compensate for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'subscriptions', and the scope 'for a customer' including both active and expired. It distinguishes from sibling tools like rc_get_customer_purchases which fetches a different resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no prerequisites or exclusions. It simply states what it does without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_get_project_snapshotA
One-shot overview of a RevenueCat project: apps, products, entitlements, and a small customer sample. Cuts 4+ tool calls down to 1 when you want the big picture of a project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | RevenueCat project id. If omitted, RC_DEFAULT_PROJECT_ID from env is used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes the contents of the snapshot (apps, products, entitlements, customer sample) but does not disclose any potential side effects, authentication needs, or rate limits. Adequate for a read-only overview, but lacks extra behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no extraneous words. Front-loaded with the core purpose and a clear benefit statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completeness is high for a low-complexity tool with one optional parameter and no output schema. Explains the tool's composite nature and when to use it. Could mention the output structure or size limit of the customer sample, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (project_id) with full schema coverage. Description adds that if omitted, RC_DEFAULT_PROJECT_ID from env is used, which is valuable context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool provides a one-shot overview of a RevenueCat project including apps, products, entitlements, and a small customer sample. Distinguishes from sibling tools like rc_list_apps, rc_list_products, etc., which are granular list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says it cuts 4+ tool calls down to 1 when you want the big picture, implying use when needing a high-level overview. Does not explicitly state when not to use, but context is clear from the contrast with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_list_appsA
List all apps under a RevenueCat project (iOS, Android, web, etc).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | RevenueCat project id. If omitted, RC_DEFAULT_PROJECT_ID from env is used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the burden of behavioral disclosure. It only states 'list all apps,' but does not disclose potential pagination, sorting, or authentication requirements. However, for a simple list operation, this is minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It efficiently conveys the tool's purpose and parameter context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one optional parameter and no output schema, the description covers all necessary aspects: what the tool does, what it lists, and the parameter's default behavior. It is complete for its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the project_id parameter, but the description adds context by mentioning it is a RevenueCat project ID and that it defaults from the RC_DEFAULT_PROJECT_ID environment variable. This goes beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists apps under a RevenueCat project, mentioning supported platforms (iOS, Android, web). This distinguishes it from sibling tools like rc_list_projects (which lists projects) and rc_list_products (which lists products).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. It implies usage when needing to list apps within a project, but does not mention cases like checking all projects first or alternative tools for different resource types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_list_customersA
List customers in a RevenueCat project. Paginate with starting_after (id of last item).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| project_id | No | RevenueCat project id. If omitted, RC_DEFAULT_PROJECT_ID from env is used. | |
| starting_after | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It discloses pagination behavior and implies that project_id can be omitted via environment variable (from schema). However, it does not mention rate limits, authentication needs, or safety (e.g., read-only hint), leaving gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long with no extraneous information. Every word serves a purpose, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 3 parameters and no output schema or annotations. The description covers purpose and pagination but lacks details on response format, error handling, or what constitutes a 'customer.' This is adequate but may leave some agent users uncertain about the data returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only project_id described). The description adds value for starting_after by explaining its function in pagination. For limit, no additional info is provided. This partially compensates for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List customers in a RevenueCat project,' which specifies the verb (list) and resource (customers). This distinguishes it from sibling tools like rc_list_projects or rc_list_apps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides pagination guidance ('Paginate with starting_after (id of last item)'), which helps in using the tool effectively. However, it does not explicitly state when to prefer this tool over alternatives, though siblings target different entities, so context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_list_entitlementsB
List entitlements configured in a RevenueCat project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | RevenueCat project id. If omitted, RC_DEFAULT_PROJECT_ID from env is used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states 'list entitlements' without disclosing any behavioral traits such as side effects, authentication needs, or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is efficient and front-loaded, but lacks any structural elements like bullet points or additional context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple list tool with one optional parameter, but missing details about the response structure (e.g., fields returned) since no output schema is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter described; description adds no extra meaning beyond the schema, matching the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'list' and resource 'entitlements in a RevenueCat project', distinguishing it from sibling tools like rc_list_products and rc_list_customers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives; lacks context on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_list_productsA
List products (SKUs) configured in a RevenueCat project. Paginate with starting_after (id of the last item from the previous page).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| project_id | No | RevenueCat project id. If omitted, RC_DEFAULT_PROJECT_ID from env is used. | |
| starting_after | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose behavioral traits. It mentions pagination but omits read-only nature, authentication needs, rate limits, or side effects. The agent lacks key safety information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences covering purpose and pagination hint. No redundant text; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic purpose and pagination, but lacks details on response format, ordering, or error handling. Given no output schema, more context on return values would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%). The description adds meaning for 'starting_after' by explaining its role in pagination, but does not elaborate on 'limit' constraints or 'project_id' details beyond schema. Partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists products (SKUs) configured in a RevenueCat project, with a specific verb and resource. It distinguishes from siblings that list other entities like apps or projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like rc_list_projects or rc_list_apps. The name implies purpose, but no exclusions or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rc_list_projectsA
List all RevenueCat projects your secret key has access to.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description does not disclose any behavioral traits such as pagination, rate limits, return format, or side effects. It only states the basic function, which is insufficient for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the purpose. No unnecessary words or repetition. It earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description is mostly complete for listing projects. However, it does not mention pagination, response structure, or potential limitations, which would be helpful for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to add parameter info. The schema coverage is 100% (empty schema). The description does not add any parameter-specific meaning but is not required to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'RevenueCat projects', and specifies the scope 'your secret key has access to'. It distinguishes itself from siblings like rc_list_apps which list apps, not projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or when to avoid, nor alternatives. However, the context implies it is a prerequisite for other RevenueCat operations. The description lacks explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
17 tool updates
v0.2.0- First observed
asc_get_geo_conversion_summary - First observed
asc_get_sales_report - First observed
asc_get_subscription_events - First observed
asc_get_subscription_events_range - First observed
asc_list_all_apps_snapshot - First observed
asc_list_apps - First observed
asc_list_customer_reviews - First observed
asc_reply_to_review - First observed
rc_get_customer - First observed
rc_get_customer_purchases - First observed
rc_get_customer_subscriptions - First observed
rc_get_project_snapshot - First observed
rc_list_apps - First observed
rc_list_customers - First observed
rc_list_entitlements - First observed
rc_list_products - First observed
rc_list_projects
TDQS
Each tool has a clearly distinct purpose, aided by the 'asc_' and 'rc_' prefixes that separate the two domains. Within each domain, tools target different resources and actions (e.g., listing apps vs. getting sales reports vs. replying to reviews).
All tools follow a consistent verb_noun pattern (e.g., asc_list_apps, rc_get_customer). The domain prefix (asc_ or rc_) provides clear grouping, and there are no mixed conventions or ambiguous verbs.
17 tools is well-scoped for a server covering two distinct services (App Store Connect and RevenueCat). Each domain has a sufficient number of tools to cover its core operations without being overwhelming.
The tool set covers the major operations for both App Store Connect (listing apps, sales/subscription reports, customer reviews) and RevenueCat (projects, products, customers, subscriptions). No obvious gaps are present for the intended use case of data retrieval and reporting.
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 Connectors
- SomviaOAuthapp.somvia
Private Apple Health metrics and workout detail for ChatGPT, Claude, and any MCP client.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
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.
Related MCP Servers
- AlicenseAqualityDmaintenanceA 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.528924MIT
- 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.6913913MIT
- 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.41110MIT
- AlicenseNot gradedqualityAmaintenanceA 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.30MIT
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