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 protocolo 2025-06-18.
  • Capacidades: tools y prompts.
  • Funciona solo mientras AppNorth está abierta y el servidor está activo.
  • Requiere licencia.

Seguridad

  • Solo escucha en tu propio Mac (127.0.0.1 y ::1); no es accesible desde tu red.
  • Rechaza con 403 las 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

  1. 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.
  2. Comprueba que Estado dice Activo y copia el Endpoint: http://127.0.0.1:8089/mcp.
  3. 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.

mcp.json
{
  "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.

mcp.json
{
  "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.

Terminal
claude mcp add --transport http appnorth http://127.0.0.1:8089/mcp

Antigravity

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.

mcp_config.json
{
  "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:

  1. Ejecuta estos comandos en Terminal.
  2. Copia la URL https://….trycloudflare.com que imprime y añade /mcp al final (en AppNorth tienes el botón Copiar sufijo /mcp).
  3. En Claude Desktop, pégala en Ajustes → Conectores → Añadir conector personalizado.
  4. Al terminar, cierra el túnel con Ctrl C.
Terminal
# 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:8089

Puerto 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

ToolQué hace
list_appsLista todas las apps y proyectos temporales que sigues.
get_app_keywordsKeywords seguidas de una app, con posición, cambio, popularidad, dificultad, nota y tags. Filtro por store e histórico opcional.
search_rankingsPosiciones de las keywords de una app, filtrables por store y keyword, con histórico opcional.
get_app_ratingsRating medio y número de valoraciones, global y por store, con sus cambios. Histórico opcional.
extract_competitors_keywordsExtrae keywords de los títulos de las apps que posicionan para una keyword seguida (popularidad > 5 en el dataset local).
add_appSigue una app por Adam ID o URL (appId) o por nombre (appName, añade el primer resultado).
add_keywordsAñade hasta 100 keywords a una app en un store. Las que ya existen se omiten.
set_keyword_noteEscribe, cambia o borra la nota de una keyword.
set_keyword_tagAñade (add) o quita (remove) un tag existente de una keyword.
manage_tagLista, crea, edita o borra tags (list, create, update, delete).
search_app_storeBúsqueda en vivo en la App Store: 50 resultados por defecto, 100 como máximo.
get_keyword_suggestionsSugerencias de keywords para una app seguida o para cualquier app por su Adam ID, con su popularidad cuando la hay.
get_keyword_suggestions_for_storeExtensión de AppNorth: sugerencias de keywords para una app en el store que elijas, sin depender del store seleccionado.
assess_keywordsEvalú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_keywordsKeywords más buscadas de una categoría en un store, del dataset de Apple Ads. Por defecto, la categoría de la app.
copy_keywordsCopia 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_keywordsTraduce 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):

ToolQué hace
get_appDatos completos de una app (app_id).
list_keywordsKeywords de una app (app_id).
update_keywordsCambia el texto o la nota de una keyword.
remove_keywordsElimina keywords y su histórico (keyword_ids).
get_keyword_historyHistórico de posición, dificultad y popularidad de una keyword.
get_keyword_resultsApps observadas en la última búsqueda.
get_ratings / get_rating_historyHistórico de ratings de una app.
list_tags / create_tagLista o crea tags de una app.
set_keyword_tagsSustituye todos los tags de una keyword.
refresh_keywordsActualiza 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:

AnnotationQué indica
readOnlyHintLa tool solo lee; no cambia tu workspace.
destructiveHintPuede borrar o sobrescribir datos: remove_keywords, manage_tag, set_keyword_tag, set_keyword_tags, set_keyword_note y update_keywords.
idempotentHintRepetir la llamada con los mismos argumentos no cambia nada más.
openWorldHintSale 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: appId acepta el Adam ID de la App Store o el identificador interno (workspaceId de list_apps). appName debe coincidir con el nombre exacto (sin distinguir mayúsculas); si hay dos apps con ese nombre, usa appId.
  • Stores: códigos de país de dos letras (ES, US…). add_keywords y extract_competitors_keywords lo exigen.
  • Keywords repetidas: si una keyword existe en varios stores, indica store o usa su keywordId.
  • Histórico: includeHistory devuelve todas las observaciones; úsalo solo cuando lo necesites.
  • Sugerencias: para una app seguida, get_keyword_suggestions devuelve 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 en appId: 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_keywords no 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_keywords necesita targetStore, targetAppId o targetAppName. Filtra por store de origen, keywords o tag, 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, purple y gray.
  • Traducción: translate_keywords usa 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_keywords lee el dataset de Apple Ads ya descargado; sin él, la lista sale vacía (datasetAvailable: false). category acepta 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 /mcp y 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 appId o indique el store.
  • Claude Desktop deja de responder: el túnel se ha cerrado o su URL ha cambiado. Ábrelo de nuevo y actualiza el conector.