AppSkyline MCP

Acompanhe rankings de palavras-chave na app store, histórico de posições, metadados de listagem, engajamento, avaliações e concorrentes em iOS, macOS, Google Play e Microsoft Store.

Documentação

Drive seu rank tracking na app store a partir do seu próprio código: uma API REST com chaves de escopo e limites de taxa por chave sobre os apps e termos de busca que você acompanha na iOS App Store, Google Play e Microsoft Store, além de webhooks assinados quando algo muda.

Chaves de API

Obtenha uma chave e autentique-se

A API REST do AppSkyline permite que seu backend trabalhe com o que o painel mostra: os apps que sua organização acompanha, os termos de busca monitorados para cada um deles na iOS App Store, Google Play e Microsoft Store, e as linhas de engajamento da loja por trás das páginas de estatísticas.

Abra o painel do AppSkyline e crie uma chave de API em API keys. O segredo é exibido apenas uma vez, quando a chave é criada, e nunca mais — guarde-o em um local seguro. Uma chave pertence a uma única organização, então a organização está implícita na chave e nunca precisa ser enviada.

Autentique cada requisição com autenticação HTTP Basic carregando apenas o segredo da chave, codificado em base64, no cabeçalho Authorization.

# The Authorization header is HTTP Basic auth carrying only the key secret,
# with no username and no colon.
Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)

Todo endpoint vive sob https://api.appskyline.com. Requisições feitas com uma chave são limitadas por chave; exceder o limite retorna 429.

Início rápido

Suas três primeiras chamadas

Liste seus apps monitorados, comece a monitorar um novo termo de busca para um deles e, em seguida, leia os termos monitorados para esse app.

# List the apps your organization tracks
curl https://api.appskyline.com/api/apps \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"

# Track a new search term for one of them. country is a two-letter ISO code and
# language a two-letter ISO code; the pair is the storefront the term is
# ranked in.
curl -X POST https://api.appskyline.com/api/keywords \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "appId": "APP_ID",
    "searchTerms": "dental practice software",
    "country": "us",
    "language": "en"
  }'

# Read back the terms tracked for that app
curl "https://api.appskyline.com/api/keywords?appId=APP_ID&limit=50" \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"

Explore a referência completa da API — cada endpoint com seus parâmetros, corpo da requisição, respostas e escopo necessário.

CLI

Interface de linha de comando

Os mesmos apps, palavras-chave e rankings estão disponíveis no seu terminal através do CLI appskyline. Instale-o globalmente com npm, ou execute-o ad hoc com npx.

A autenticação é um único comando: appskyline login abre seu navegador para entrar na sua conta AppSkyline e armazena uma sessão para comandos futuros — sem necessidade de colar chave de API.

# Install once, globally
npm install -g appskyline
# or run it ad hoc without installing
npx appskyline --help

# Log in — opens your browser to sign in and stores a session
appskyline login

# List the apps your organization tracks
appskyline apps list

# Where does your app rank right now for a term?
appskyline rank APP_ID --store ios-app-store --term "dental practice software" --country US

# Live top-10 results for a term on a store
appskyline search ios-app-store --term "dental practice software" --country US

# Search volume, CPC and difficulty for keyword ideas
appskyline keywords overview --country US --terms "dental software,dentist app"

O CLI é open source em github.com/appskyline/cli e publicado como appskyline no npm. Execute qualquer comando com --help para ver suas opções.

Conector Claude

Use AppSkyline a partir do Claude

Conecte o AppSkyline ao Claude para perguntar sobre os apps que sua organização acompanha, os termos de busca que você monitora e seus rankings atuais na loja. O conector usa sua conta AppSkyline, então o Claude só pode acessar a organização que você autorizar.

No Claude, abra Configurações, escolha Conectores e adicione um conector personalizado com a URL abaixo. O Claude envia você ao AppSkyline para entrar e aprovar o acesso. Após conectar, faça uma pergunta em linguagem natural como "Qual é o nosso ranking atual para restaurant POS na iOS App Store nos Estados Unidos?"

# In Claude: Settings > Connectors > Add custom connector
# Connector URL
https://mcp.appskyline.com/mcp

# Then sign in to your AppSkyline account when Claude asks you to connect.
# Example prompt: "Show the current App Store rank for one of my apps."

O conector tem ferramentas separadas de leitura e escrita. O Claude identifica mudanças antes de executá-las, enquanto consultas de ranking podem renderizar um resultado inline compacto com o app, loja, país, palavra-chave e posição atual.

Você precisa de uma conta AppSkyline com acesso a pelo menos um app monitorado. Para remover o acesso depois, desconecte o AppSkyline no Claude ou revogue a conexão na sua conta AppSkyline.

Outros clientes MCP

Use AppSkyline a partir de qualquer cliente MCP

O AppSkyline fala o Model Context Protocol sobre HTTP transmissível, então funciona com qualquer cliente que suporte servidores MCP remotos — não apenas o Claude. Não há nada para instalar e nenhuma chave de API para colar: aponte o cliente para a URL abaixo e entre no AppSkyline quando solicitado.

# Any MCP client that supports remote servers uses the same URL:
https://mcp.appskyline.com/mcp

# Codex CLI
codex mcp add appskyline --url https://mcp.appskyline.com/mcp
codex mcp login appskyline

# VS Code
code --add-mcp '{"name":"appskyline","type":"http","url":"https://mcp.appskyline.com/mcp"}'

# Cursor, Windsurf and other editors: add to their MCP config file
{
  "mcpServers": {
    "appskyline": {
      "type": "http",
      "url": "https://mcp.appskyline.com/mcp"
    }
  }
}

# Clients that only support local (stdio) servers can bridge:
npx mcp-remote https://mcp.appskyline.com/mcp

Este também é um servidor MCP App que implementa a extensão padrão io.modelcontextprotocol/ui. A ferramenta show_app_overview renderiza ui://appskyline/app-overview-v13.html, e resultados de rank de palavra-chave renderizam ui://appskyline/keyword-rank-v6.html. Ambos os recursos usam text/html;profile=mcp-app, declaram uma Política de Segurança de Conteúdo inline restritiva limitada às origens MCP e do host, e suportam esquemas de cores claro/escuro em hosts compatíveis, incluindo Claude e ChatGPT.

A autenticação usa OAuth 2.0 com registro dinâmico de cliente e PKCE, o que significa que os clientes se registram sozinhos — você nunca copia um ID de cliente ou segredo. Clientes que só suportam servidores locais podem fazer a ponte para o endpoint remoto com mcp-remote.

O AppSkyline faz login através do mesmo servidor de autorização que nossos outros produtos, então a tela de aprovação pode listar escopos para produtos além do AppSkyline. O acesso é fixado ao produto que você conectou: um token emitido para o AppSkyline só é aceito pelo AppSkyline, e você pode revogá-lo a qualquer momento na sua conta.

Documentação MCP

Pesquise a documentação do AppSkyline a partir de qualquer agente

O AppSkyline publica um endpoint MCP separado, público e somente leitura para documentação. Ele pesquisa e lê a visão geral canônica do produto, guia do desenvolvedor, API REST, autenticação, preços e Markdown de privacidade sem acessar uma organização ou exigir uma conta.

# Public read-only documentation server
https://mcp.appskyline.com/docs-mcp

# No AppSkyline account or OAuth token is required.
# Available tools: search_appskyline_documentation and get_appskyline_documentation

Use search_appskyline_documentation quando você não souber qual página responde à pergunta e, em seguida, use get_appskyline_documentation para a fonte citada completa. Ações de produto e dados privados de ranking permanecem no servidor MCP AppSkyline protegido por OAuth.

Plugins de Agente

Instale o AppSkyline como um plugin portátil

O padrão aberto Agent Plugins empacota o servidor MCP AppSkyline e sua habilidade de pesquisa ASO juntos. Instale um repositório e seu agente aprende o fluxo de trabalho, conecta-se às ferramentas remotas e envia você pelo mesmo fluxo de aprovação OAuth do AppSkyline — nenhuma chave de API ou segredo de cliente está incluído no plugin.

# Portable Agent Plugins package (Kiro, Cursor, Copilot-compatible hosts)
https://github.com/appskyline/claude-plugin

# Gemini CLI
gemini extensions install https://github.com/appskyline/claude-plugin

# Google Antigravity uses its native adapter from the same repository
git clone https://github.com/appskyline/claude-plugin.git
agy plugin install ./claude-plugin/com.google.antigravity

O repositório inclui os manifestos portáteis plugin.json e mcp.json, além de adaptadores nativos para Claude, Gemini CLI e Google Antigravity. O pacote portátil também é o artefato de submissão para Kiro Powers, Cursor Marketplace e Awesome Copilot.

Agentes e registros podem descobrir o mesmo pacote a partir do manifesto well-known Agent Plugin ou do AI Catalog do AppSkyline.

Habilidades de Agente

Ensine seu agente de codificação sobre o AppSkyline

O AppSkyline inclui Agent Skills — guias que seguem o padrão agentskills.io e ensinam agentes de codificação a executar pesquisa ASO com o CLI appskyline e o conector MCP, em vez de adivinhar comandos e ferramentas.

# Install the AppSkyline skills into your coding agent
npx skills add appskyline/skills

Um único comando instala as habilidades no Claude Code, Cursor, Codex, Gemini CLI e qualquer outro agente que siga o padrão Skills. O CLI também inclui os mesmos guias, com versão correspondente aos comandos que ele fornece: appskyline skills get <name> imprime um sob demanda.

As habilidades são open source em github.com/appskyline/skills. Usuários do Claude também podem instalar o plugin AppSkyline Claude, que combina o conector com as habilidades: github.com/appskyline/claude-plugin.

Escopos

Menor privilégio por padrão

Cada chave carrega uma lista de escopos, então uma integração que só precisa ler seus rankings nunca obtém a capacidade de alterar o que é monitorado. Novas chaves começam somente leitura; amplie-as explicitamente no painel. Uma requisição cuja chave não tenha o escopo que um endpoint exige é recusada com 403.

  • apps:readListe os apps da sua organização e leia um por id.
  • apps:writeCrie e atualize apps.
  • keywords:readListe termos de busca monitorados e leia um por id.
  • keywords:writeCrie, atualize e exclua termos de busca monitorados.
  • stats:readLeia linhas de engajamento da loja para seus apps.

Webhooks

Webhooks assinados

Adicione uma assinatura de webhook à sua organização e o AppSkyline envia por POST os eventos que você escolheu para o seu servidor conforme eles acontecem.

  • app.createdUm app foi adicionado ao monitoramento.
  • app.updatedUm app foi editado.
  • keyword.createdUm termo de busca começou a ser monitorado para um app.
  • keyword.updatedUm termo de busca monitorado foi editado.
  • keyword.deletedUm termo de busca monitorado foi removido.
POST https://your-server.com/appskyline-webhook

{
  "event": "keyword.created",
  "timestamp": 1719000000,
  "data": { "...": "..." }
}

Verifique a assinatura

Cada entrega carrega um cabeçalho X-Appskyline-Signature no formato t=timestamp,v1=assinatura, onde a assinatura é um HMAC-SHA256 de timestamp.corpo com chave no segredo da assinatura mostrado a você uma vez quando a assinatura foi criada. Recalcule-o sobre o corpo bruto e compare antes de confiar no payload.

import crypto from 'node:crypto'

// body must be the RAW request body, byte for byte
function verify(header, body, secret) {
  const [t, v1] = (header || '').split(',').map(part => part.split('=')[1])
  if (!t || !v1) return false

  const expected = crypto
    .createHmac('sha256', secret)
    .update(\`${t}.${body}\`)
    .digest('hex')

  // timingSafeEqual throws on a length mismatch, so a malformed signature
  // has to be rejected before the comparison rather than by it.
  if (v1.length !== expected.length) return false

  return crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
}

A entrega é uma única tentativa de melhor esforço com timeout de cinco segundos e sem novas tentativas, então responda 2xx rapidamente e faça o trabalho de forma assíncrona. Um endpoint que falha vinte vezes seguidas é desabilitado automaticamente e precisa ser reabilitado no painel.

Comece a construir