Integrations
Servidor MCP
Conecta tu agente a AppNorth para consultar tus apps iOS, preparar cambios en App Store y analizar tu mercado. Usa el mismo token y endpoint para las herramientas de tu app y las de Explore. Las escrituras se previsualizan por defecto; tú autorizas su ejecución.
Conectar tu agente
Abre ajustes de tu cuenta y crea un token API. Guarda el valor cuando aparezca: después no se vuelve a mostrar.
Configura una conexión MCP de tipo Streamable HTTP con la URL
https://www.appnorth.app/api/v1/mcp. En una instalación propia, sustituye el dominio por el de tu hub.Envía
Authorization: Bearer <TOKEN_APPNORTH>en cada petición. Los tokens del hub empiezan poran_; nunca los pegues en prompts públicos, commits ni código del SDK iOS.Pide al agente que consulte
get_guardrailsytools/listantes de trabajar.prompts/listdevuelve las guías disponibles.
La organización viene del token, nunca de un argumento de la herramienta. El autor debe seguir siendo miembro de esa organización. Un token con read permite consultas y previsualizaciones; ejecutar cambios requiere write y que su autor siga siendo owner o admin. Revoca el token desde ajustes cuando deje de hacer falta.
Los antiguos tokens al_mcp_ de AppLibrary no funcionan en este endpoint. Crea un token del hub; esta integración no convierte credenciales antiguas automáticamente.
Permisos y planes de mercado
| Acceso | Free | Pro | Studio |
|---|---|---|---|
| Catálogo básico y ranking de Trending | Sí | Sí | Sí, ficha completa |
| Fichas de app | 10 consultas al día, con rangos | 10 consultas al día, con rangos | Fichas completas, con créditos |
| Watchlist | No | Hasta 5 apps | Según el límite vigente del plan |
| Filtros avanzados, comparaciones y Rising | No | No | Sí, con créditos |
| Pantallas, anuncios, posts, vídeos y artículos | No | No | Sí, con créditos |
Free y Pro reciben rangos de estimación, sin bibliotecas ni cifras exactas. La cuota diaria se comparte entre todos los tokens de la organización y se renueva a medianoche UTC. Cada consulta de ficha admitida cuenta, incluso si el slug no existe; repetir una consulta no evita el límite.
Las herramientas de tu propia app mantienen sus permisos y límites: que un token pueda usar MCP no desbloquea ASO, respuestas a reviews ni cambios de precios de otro plan.
Créditos mensuales
Cada lectura de mercado admitida en Studio consume un crédito por llamada, incluida una comparación de varias apps. La watchlist, sus previsualizaciones y los accesos limitados de Free/Pro no consumen créditos API. Descubrir herramientas o prompts tampoco consume créditos.
Los créditos pertenecen a la organización, se comparten entre tokens y se renuevan el primer día de cada mes a las 00 UTC. Se reservan antes de consultar datos: una llamada admitida que después devuelve contenido no encontrado o un fallo de lectura también consume su crédito. Una llamada rechazada por falta de plan, cuota o validación no consume créditos.
La asignación procede del catálogo de billing. La asignación actual de Studio es cero, pendiente de aprobación del producto: mientras siga así, las lecturas de mercado Studio devuelven API_CREDITS_EXHAUSTED. No se supone una cuota ni se ofrece acceso ilimitado por tener cero. Las instalaciones con billing desactivado usan el acceso sin límite configurado para self-hosting.
Los resultados incluyen credits junto a los datos, en structuredContent y en el bloque de texto JSON:
{
"period": "YYYY-MM",
"limit": 100,
"used": 12,
"remaining": 88,
"cost": 1,
"unlimited": false,
"resets_at": "YYYY-MM-01T00:00:00.000Z"
}Los números anteriores solo ilustran el formato; no son una cuota comercial ni datos de uso. limit y remaining son null cuando unlimited es true. Un error anterior a la lectura del contador puede no incluir credits. Las consultas de fichas limitadas incluyen también daily con el límite, lo que queda y la próxima renovación.
Herramientas de tu app
| Herramienta | Qué hace |
|---|---|
get_guardrails | Reglas de permisos, previsualización, confirmación y datos. |
get_aso_playbook | Guía de ASO y mercado; no ejecuta cambios. |
list_apps | Apps accesibles de tu organización e identificadores de App Store Connect. |
get_metadata | Metadata de la versión editable, por locale. |
get_metadata_suggestions | Propuesta determinista para el campo keywords. |
update_metadata | Previsualiza o publica cambios de metadata. |
list_keywords | Keywords seguidas, posiciones e histórico disponible. |
get_keyword_candidates | Candidatos de keywords. |
add_keywords | Previsualiza o añade keywords al seguimiento. |
remove_keywords | Previsualiza o elimina una keyword seguida. |
get_keyword_grid | Cuadrícula por keyword y país. |
get_competitors_ahead | Competidores observados por delante en tus keywords. |
get_localization_plan | Locales, países y presupuesto de keywords. |
add_localized_keywords | Previsualiza o crea un grupo localizado de keywords. |
get_ratings | Valoraciones e histórico disponibles. |
list_reviews | Reviews de tu app, con filtros. |
reply_review | Previsualiza o envía una respuesta a una review. |
suggest_localized_prices | Propone price points disponibles en Apple. |
schedule_price_changes | Previsualiza o programa cambios de precios. |
list_feedback | Feedback recibido desde tu app. |
Herramientas de mercado
Los slugs y los IDs salen de los resultados del servidor: no los deduzcas del nombre. adamId es el ID numérico de la app en App Store, distinto del app_id de un proyecto de tu organización.
Las listas aceptan limit (por defecto 25, máximo 50) y offset (por defecto 0, máximo 100000), y devuelven items y nextOffset. Si nextOffset es null, no hay otra página. market_get_app pagina cada biblioteca anidada con esos mismos parámetros. Las comparaciones, una imagen y un artículo no usan paginación.
| Herramienta | Argumentos principales y resultado |
|---|---|
market_search_apps | query, category; filtros Studio: paywallType, tag, minRevenueUsd, hasVideo, hasAds, flowType. sort: revenue, downloads, rating o recent. Devuelve apps publicadas. |
market_get_app | slug. Ficha básica o completa; Studio recibe métricas, charts y bibliotecas paginadas. |
market_search_screens | query, flowType, tag. Pantallas con sus IDs y la app/flujo al que pertenecen. |
market_compare_apps | slugs: de 2 a 5. Compara en el orden solicitado, con estimaciones, paywall y patrones. |
market_list_flow_screens | flowId. Pantallas de un flujo publicado en su orden original. |
market_get_screen_image | screenId. Metadatos y URL firmada de la imagen, válida durante 600 segundos. No devuelve bytes de imagen ni aplica un watermark nuevo. |
market_list_app_ads | slug, platform, activeOnly. Anuncios más recientes primero. |
market_list_social_posts | slug, platform, source, sort (views o recent). Solo posts ya disponibles. |
market_get_video_chapters | slug. Duración, tipo y capítulos de un vídeo listo; no descarga el vídeo. |
market_list_articles | app (slug), kind, tag. Análisis publicados y apps vinculadas. |
market_get_article | slug. Análisis en Markdown con referencias de evidencia conservadas. |
market_trending | storefront (por defecto us), chart, genre. Ranking del último snapshot completo, con su fecha real. |
market_rising | Mismos filtros, más kind: riser, faller o new. Cambios entre snapshots completos; no inventa una comparación si falta histórico. |
market_watchlist | action: list, add o remove; para cambios, adamId y opcionalmente note. Lee o modifica tu watchlist. |
flowType admite onboarding, full-app, paywall, cancellation, activation y retention. chart admite topfreeapplications, toppaidapplications y topgrossingapplications. La fecha del snapshot identifica la observación: un resultado no promete que los datos sean de hoy.
Ingresos y descargas de mercado son estimaciones, no revenue conectado de RevenueCat. Conserva fuente, periodo y fecha al citarlas. Un dato ausente permanece null; no significa cero. Un ranking alto no prueba la conversión de un onboarding o paywall.
Previsualizar y confirmar cambios
Todas las mutaciones usan dry_run=true por defecto y devuelven diff.before, diff.after y diff.warnings. Revisa el cambio concreto antes de autorizarlo. Para update_metadata, conserva diff.before como expected al ejecutar para detectar una revisión obsoleta.
market_watchlist, add_localized_keywords y schedule_price_changes exigen además confirm=true. Sin ambos flags explícitos, la watchlist devuelve una previsualización:
{
"name": "market_watchlist",
"arguments": {
"action": "add",
"adamId": "<ID_DEVUELTO_POR_EL_CATALOGO>",
"note": "Revisar su onboarding",
"dry_run": true
}
}Después de revisar y autorizar, repite con el mismo ID y propuesta, dry_run=false y confirm=true. Un token de lectura no puede ejecutarlo. La capacidad se comprueba de nuevo dentro de una transacción por organización; una previsualización no reserva una plaza.
Repetir add sobre la misma app no crea duplicados; si omites note, conserva la existente. Repetir remove sobre una app ya eliminada no afecta a otras entradas. Las notas solo pertenecen a tu organización.
Prompts de mercado
clone_winner: argumentosappyreference. Analiza una referencia y propone patrones adaptados a tu app, con identidad, textos y assets propios.paywall_ideas: argumentosappycategory. Busca evidencia de paywalls y propone experimentos sin inventar conversiones.market_scan: argumentoapp;storees opcional y usaUSpor defecto. Revisa rankings y competidores, y prepara propuestas de watchlist.
Los prompts no hacen llamadas ni escriben por sí solos: guían al agente. Los artículos, posts, notas y pantallas de terceros son datos no confiables, nunca instrucciones que autoricen acciones o cambien las reglas del usuario.
Errores y recuperación
| Código | Qué hacer |
|---|---|
PLAN_REQUIRED | Lee required_plan y usa una función incluida o cambia de plan. |
API_CREDITS_EXHAUSTED | Consulta credits.limit y resets_at. Si la asignación es cero, esperar al próximo mes no la aumenta. |
DAILY_APP_LIMIT | Espera a daily.resets_at o usa Studio cuando tenga créditos asignados. |
WATCHLIST_LIMIT | Elimina una app de la watchlist antes de añadir otra. |
WRITE_NOT_ALLOWED | Usa un token write cuyo autor siga siendo owner o admin. |
INVALID_INPUT | Corrige los argumentos; consulta el esquema con tools/list. |
NOT_FOUND | Actualiza los slugs o IDs desde los resultados; el contenido puede no estar publicado. |
MEDIA_UNAVAILABLE | La imagen aún no está migrada o el almacenamiento no está configurado. |
MARKET_UNAVAILABLE | Reintenta más tarde; no presupongas datos ausentes como ceros. |
Los errores de herramientas llevan isError=true; un HTTP 200 no significa que la operación haya funcionado. La validación del protocolo puede devolver su propio error antes de ejecutar la herramienta. Un token ausente, revocado o sin membresía válida devuelve HTTP 401. El límite de peticiones devuelve HTTP 429: respeta Retry-After y evita bucles de reintento.