Servidor MCP
Deja que tu asistente de IA consulte y organice tu investigación de AppNorth, sin salir de tu Mac.
Cómo funciona
AppNorth incluye un servidor MCP (Model Context Protocol) que expone tus apps, keywords, ratings y tags como herramientas («tools») para clientes compatibles. Tu asistente las llama cuando las necesita para responder o hacer una tarea. También publica una biblioteca de prompts listos para usar.
- Transporte HTTP en
POST http://127.0.0.1:8089/mcp, con JSON-RPC 2.0 y la versión de protocolo2025-06-18. - Capacidades:
toolsyprompts. - Funciona solo mientras AppNorth está abierta y el servidor está activo.
- Requiere licencia.
Seguridad
- Solo escucha en tu propio Mac (
127.0.0.1y::1); no es accesible desde tu red. - Rechaza con
403las peticiones cuyo origen sea una web externa, y no envía cabeceras CORS: un sitio web no puede llamarlo desde tu navegador. - Límite de 60 peticiones por minuto; por encima responde
429. - No tiene contraseña: cualquier programa de tu Mac puede usarlo mientras está activo. Apágalo si no lo usas.
Activar el servidor
- Abre Preferencias (⌘,) → MCP local y activa Habilitar MCP. También puedes usar el interruptor Servidor MCP de la pantalla de inicio o de la parte inferior de la barra lateral.
- Comprueba que Estado dice Activo y copia el Endpoint:
http://127.0.0.1:8089/mcp. - Opcional: activa Iniciar automáticamente para que arranque al abrir AppNorth.
En Preferencias → Conectar un cliente MCP tienes la configuración de cada cliente lista para copiar, ya con tu puerto.
Configurar tu cliente
Cursor
Pégalo en ~/.cursor/mcp.json (o .cursor/mcp.json del proyecto) y reinicia Cursor.
{
"mcpServers": {
"appnorth": {
"url": "http://127.0.0.1:8089/mcp"
}
}
}VS Code
Pégalo en .vscode/mcp.json del proyecto o ejecuta MCP: Open User Configuration.
{
"servers": {
"appnorth": {
"type": "http",
"url": "http://127.0.0.1:8089/mcp"
}
}
}Claude Code
Ejecútalo en Terminal; añade --scope user para tenerlo en todos los proyectos.
claude mcp add --transport http appnorth http://127.0.0.1:8089/mcpAntigravity
En el panel del agente, abre ⋯ → MCP Servers → Manage MCP Servers → View raw config. Añade este servidor a mcp_config.json(o al archivo del proyecto .agents/mcp_config.json) y recarga la configuración. Para conexiones HTTP, Antigravity usa serverUrl.
{
"mcpServers": {
"appnorth": {
"serverUrl": "http://127.0.0.1:8089/mcp"
}
}
}Claude Desktop
Claude Desktop solo admite conectores remotos, así que necesita un túnel temporal de Cloudflare hacia el servidor local:
- Ejecuta estos comandos en Terminal.
- Copia la URL
https://….trycloudflare.comque imprime y añade/mcpal final (en AppNorth tienes el botón Copiar sufijo /mcp). - En Claude Desktop, pégala en Ajustes → Conectores → Añadir conector personalizado.
- Al terminar, cierra el túnel con Ctrl C.
# Instala cloudflared si no lo tienes
command -v cloudflared >/dev/null || brew install cloudflared
# Abre un túnel temporal hacia el servidor MCP local
cloudflared tunnel --url http://127.0.0.1:8089Puerto personalizado
El puerto por defecto es 8089. Si otro programa lo usa, cámbialo en Preferencias → MCP local → Puerto (de 1024 a 65535). Si el servidor está activo se reinicia en el puerto nuevo; si no puede abrirlo, vuelve al anterior. Después, actualiza la URL en la configuración de tu cliente.
Tools disponibles
| Tool | Qué hace |
|---|---|
list_apps | Lista todas las apps y proyectos temporales que sigues. |
get_app_keywords | Keywords seguidas de una app, con posición, cambio, popularidad, dificultad, nota y tags. Filtro por store e histórico opcional. |
search_rankings | Posiciones de las keywords de una app, filtrables por store y keyword, con histórico opcional. |
get_app_ratings | Rating medio y número de valoraciones, global y por store, con sus cambios. Histórico opcional. |
extract_competitors_keywords | Extrae keywords de los títulos de las apps que posicionan para una keyword seguida (popularidad > 5 en el dataset local). |
add_app | Sigue una app por Adam ID o URL (appId) o por nombre (appName, añade el primer resultado). |
add_keywords | Añade hasta 100 keywords a una app en un store. Las que ya existen se omiten. |
set_keyword_note | Escribe, cambia o borra la nota de una keyword. |
set_keyword_tag | Añade (add) o quita (remove) un tag existente de una keyword. |
manage_tag | Lista, crea, edita o borra tags (list, create, update, delete). |
search_app_store | Búsqueda en vivo en la App Store: 50 resultados por defecto, 100 como máximo. |
get_keyword_suggestions | Sugerencias de keywords para una app seguida o para cualquier app por su Adam ID, con su popularidad cuando la hay. |
get_keyword_suggestions_for_store | Extensión de AppNorth: sugerencias de keywords para una app en el store que elijas, sin depender del store seleccionado. |
assess_keywords | Evalúa hasta 50 términos, los sigas o no: popularidad (dataset local), dificultad y número de apps de una búsqueda en vivo. |
get_top_keywords | Keywords más buscadas de una categoría en un store, del dataset de Apple Ads. Por defecto, la categoría de la app. |
copy_keywords | Copia keywords (todas, una lista o las de un tag) a otro store de la misma app o a otra app, con notas y tags. |
translate_keywords | Traduce hasta 50 términos con tu clave de DeepL. |
Por compatibilidad con versiones anteriores, el servidor ofrece además estas tools, que trabajan con identificadores internos (app_id, keyword_id):
| Tool | Qué hace |
|---|---|
get_app | Datos completos de una app (app_id). |
list_keywords | Keywords de una app (app_id). |
update_keywords | Cambia el texto o la nota de una keyword. |
remove_keywords | Elimina keywords y su histórico (keyword_ids). |
get_keyword_history | Histórico de posición, dificultad y popularidad de una keyword. |
get_keyword_results | Apps observadas en la última búsqueda. |
get_ratings / get_rating_history | Histórico de ratings de una app. |
list_tags / create_tag | Lista o crea tags de una app. |
set_keyword_tags | Sustituye todos los tags de una keyword. |
refresh_keywords | Actualiza la posición de las keywords indicadas. |
Cada tool publica en tools/list un title y unas annotations que tu cliente puede usar, por ejemplo, para pedirte confirmación antes de una escritura:
| Annotation | Qué indica |
|---|---|
readOnlyHint | La tool solo lee; no cambia tu workspace. |
destructiveHint | Puede borrar o sobrescribir datos: remove_keywords, manage_tag, set_keyword_tag, set_keyword_tags, set_keyword_note y update_keywords. |
idempotentHint | Repetir la llamada con los mismos argumentos no cambia nada más. |
openWorldHint | Sale de tu Mac: App Store, Apple Ads, el grafo compartido o DeepL. |
Las respuestas de tools/call traen el JSON en content (texto) y en structuredContent. Como structuredContent siempre es un objeto, las listas van ahí dentro de items; el texto no cambia.
Prompts
El servidor publica los 15 prompts de la Biblioteca de prompts MCP con prompts/list y prompts/get. Cada uno declara sus argumentos (app, store, keyword…); los que tienen valor por defecto son opcionales. En los clientes que los admiten aparecen como comandos; en Claude Code, por ejemplo, /mcp__appnorth__suggest_popular_keywords.
Notas de las tools
- Elegir la app:
appIdacepta el Adam ID de la App Store o el identificador interno (workspaceIddelist_apps).appNamedebe coincidir con el nombre exacto (sin distinguir mayúsculas); si hay dos apps con ese nombre, usaappId. - Stores: códigos de país de dos letras (
ES,US…).add_keywordsyextract_competitors_keywordslo exigen. - Keywords repetidas: si una keyword existe en varios stores, indica
storeo usa sukeywordId. - Histórico:
includeHistorydevuelve todas las observaciones; úsalo solo cuando lo necesites. - Sugerencias: para una app seguida,
get_keyword_suggestionsdevuelve las keywords de los competidores observados en tus búsquedas; si no hay, las de la propia app (grafo compartido o título). Para cualquier otra app, pasa su Adam ID enappId: con licencia devuelve las keywords del grafo compartido (o de su título si no hay cobertura); sin ella, solo las de su título. Todas incluyen su popularidad cuando el dataset la tiene. - Evaluar antes de seguir:
assess_keywordsno añade nada. Hace una búsqueda en la App Store por término (4 a la vez), así que tarda más con listas largas. Si indicas la app, marca las que ya sigues (tracked). - Copiar keywords:
copy_keywordsnecesitatargetStore,targetAppIdotargetAppName. Filtra porstorede origen,keywordsotag, y devuelve cuántas añadió (added) y cuántas ya existían (duplicates). - Popularidad: depende del dataset de Apple Ads, igual que en la app. Sin credenciales no hay popularidad, y
extract_competitors_keywords, que filtra por ella, no puede devolver keywords. - Colores de tags:
red,orange,yellow,green,blue,purpleygray. - Traducción:
translate_keywordsusa tu clave de DeepL de Preferencias y requiere licencia. Acepta códigos de DeepL (IT,PT-BR) o el nombre del idioma (italiano). Sin clave, la tool devuelve un error que lo dice. - Keywords más buscadas:
get_top_keywordslee el dataset de Apple Ads ya descargado; sin él, la lista sale vacía (datasetAvailable: false).categoryacepta el género de Apple Ads (PRODUCTIVITY_UTILITIES) o su nombre.
Ideas para empezar en la Biblioteca de prompts MCP.
Solución de problemas
- El cliente no conecta: AppNorth debe estar abierta y el Estado en Activo. Revisa que la URL termina en
/mcpy usa el puerto configurado. - El interruptor dice «Requiere licencia»: activa tu licencia.
- Estado «Error: …» al iniciar: normalmente el puerto está ocupado. Elige otro en Puerto.
- Respuestas 429: se han superado 60 peticiones en un minuto. Espera y vuelve a intentarlo, o pide al asistente que agrupe las consultas.
- Respuestas 403: la petición incluye un origen web que no es local. Conecta desde un cliente MCP, no desde una página web.
- «Hay varias apps llamadas…» o una keyword ambigua: pide al asistente que use
appIdo indique elstore. - Claude Desktop deja de responder: el túnel se ha cerrado o su URL ha cambiado. Ábrelo de nuevo y actualiza el conector.