Rank by Ouroboros Apps

Rank by Ouroboros Apps: clasificaciones SEO y tráfico de Google Search Console, solo lectura

Servidor MCP alojado

npx add-mcp 'https://rank.ouroborosapps.com/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Rank by Ouroboros

Rank by Ouroboros responde preguntas de SEO desde la cuenta de Google Search Console que conectes. Está pensado para propietarios de sitios web, bloggers, pequeñas empresas y freelancers de SEO que quieren esos números dentro de ChatGPT, Claude, Gemini, Grok, Cursor o cualquier otro cliente MCP que hable Streamable HTTP y OAuth.

El asistente puede listar propiedades verificadas, leer las principales consultas y páginas, seguir clics, impresiones, CTR y posición media a lo largo del tiempo, comparar dos períodos, encontrar consultas con muchas impresiones y poco CTR, ver páginas que cayeron y comprobar el estado de URL Inspection. Cada métrica proviene de la respuesta de la API de Search Console. Rank no estima tráfico ni rellena los días que la API omitió. El CTR se mantiene como la fracción que devolvió Search Console (0.02 es 2%).

Una prueba de 14 días comienza cuando conectas Google. Después, Pro es una suscripción de Stripe. El importe se muestra en Stripe Checkout, no en este README ni en el producto.

Servidor alojado

  • URL del servidor MCP: https://rank.ouroborosapps.com/mcp (Streamable HTTP, inicio de sesión con OAuth)
  • Documentación: https://ouroborosapps.com/docs/rank
  • Estado: acceso anticipado. Pega la URL en Claude, Cursor, Grok o el modo desarrollador de ChatGPT.
  • Nombre del registro: io.github.LAHutchins91/rank

Conectar un asistente

La dirección MCP es https://YOUR_HOST/mcp después del despliegue, o http://127.0.0.1:44721/mcp cuando lo ejecutas localmente. Elige OAuth y deja el id de cliente y el secreto vacíos. Rank admite registro dinámico de clientes y PKCE.

Cursor, en ~/.cursor/mcp.json:

{
  "mcpServers": {
    "rank": {
      "url": "http://127.0.0.1:44721/mcp"
    }
  }
}

Claude Code:

claude mcp add --transport http rank http://127.0.0.1:44721/mcp

Usa la misma URL para ChatGPT, Claude, Gemini y Grok. La página de conexión dentro de la aplicación repite estos pasos para el host en APP_BASE_URL.

Herramientas

  • list_properties — propiedades verificadas de Search Console
  • top_queries — consultas para un rango de fechas
  • top_pages — páginas para un rango de fechas
  • performance_trends — clics diarios, impresiones, CTR y posición
  • compare_periods — totales para dos rangos, más diferencias marcadas como derivadas de esos totales
  • quick_wins — consultas con un umbral de impresiones mínimo y un umbral de CTR máximo
  • dropped_pages — páginas cuya posición empeoró, cuyos clics cayeron o que desaparecieron de la respuesta actual
  • inspect_url — resultado de la API de URL Inspection
  • account_status — si Google está conectado y si la suscripción de prueba o Pro está activa

Si omites las fechas, Rank usa una ventana de 28 días que termina hace tres días UTC y lo indica en el resultado. Pasa startDate y endDate (YYYY-MM-DD) para elegir la ventana.

Cliente OAuth de Google Cloud

Crea un cliente OAuth de tipo Aplicación web. Rank lee:

  • GOOGLE_CLIENT_ID
  • GOOGLE_CLIENT_SECRET

URI de redirección autorizada, exacta, sin barra final en el origen:

${APP_BASE_URL}/google/callback

Localmente, con el APP_BASE_URL predeterminado, es:

http://127.0.0.1:44721/google/callback

Añade estos ámbitos en la pantalla de consentimiento de OAuth:

  • openid
  • https://www.googleapis.com/auth/userinfo.email
  • https://www.googleapis.com/auth/webmasters.readonly

webmasters.readonly es el ámbito de solo lectura de Search Console. Rank solicita acceso sin conexión para que Google devuelva un token de actualización. El token de actualización se cifra antes de almacenarse. TOKEN_ENCRYPTION_KEY es la clave (una cadena aleatoria larga). Si la clave cambia, los tokens existentes no se pueden leer y la cuenta tiene que conectar Google de nuevo.

Si la consola de Google pide un origen de JavaScript autorizado, usa el origen de APP_BASE_URL (http://127.0.0.1:44721 localmente). La URI de redirección anterior es el valor que debe coincidir.

Almacenamiento

El estado de la prueba, los ids de cliente de Stripe, los clientes y tokens OAuth de MCP, el inicio de sesión pendiente de Google y el token de actualización cifrado de Google comparten una única interfaz de almacenamiento. Configura STORAGE_BACKEND:

BackendCuándoQué usa
memoryexperimentos y pruebas localeslos datos desaparecen cuando el proceso se detiene
fileun servidor de larga duración o un volumen de DockerSTORAGE_FILE (predeterminado ./data/rank-store.json)
blobVercelun Blob privado en STORAGE_BLOB_PATH (predeterminado rank/store.json)
postgresuna base de datos Postgres que ya ejecutasDATABASE_URL

Postgres usa una tabla, creada en el primer uso si falta:

CREATE TABLE IF NOT EXISTS rank_kv (
  collection text NOT NULL,
  id text NOT NULL,
  document jsonb NOT NULL,
  PRIMARY KEY (collection, id)
);

No hay un segundo esquema. El almacenamiento en memoria y en archivo se reinicia en Vercel, por lo que la producción usa el backend Blob. El documento Blob usa el mismo diseño que el almacén de archivos: colecciones de registros JSON. Los códigos de autorización OAuth y el estado pendiente de inicio de sesión de Google son registros en ese documento, para que una devolución de llamada pueda llegar a una instancia serverless diferente. Cada escritura elimina los códigos de autorización caducados, las sesiones de inicio de sesión pendientes, los tokens de acceso y los tokens de actualización. BLOB_READ_WRITE_TOKEN se inyecta cuando se conecta el almacén Blob de Vercel. No lo confirmes en el repositorio.

Facturación

Configúralo desde la cuenta de Stripe que Lawrence ya usa. No crees productos en este repositorio. Los ids de precio no son importes en dólares.

  • STRIPE_SECRET_KEY
  • STRIPE_PRICE_MONTHLY
  • STRIPE_PRICE_YEARLY
  • STRIPE_WEBHOOK_SECRET

El checkout es POST /billing/checkout con { "plan": "monthly" } o { "plan": "yearly" }. El webhook es POST /billing/webhook. GET /health incluye billingConfigured: true solo cuando la clave secreta y ambos ids de precio están configurados.

La prueba local es de 14 días desde la primera conexión de Google. Checkout envía a Stripe los días completos que quedan de esa prueba, si quedan, para que el primer cargo espere hasta que termine la prueba.

Ejecutar localmente

npm install
cp .env.example .env
# fill Google, encryption, and Stripe values in .env
npm run dev

El servidor escucha en PORT (predeterminado 44721).

npm test
npm run typecheck
npm start

npm start ejecuta el servidor compilado. Docker compila el mismo comando (node dist/src/server.js) y espera logo.jpg en la raíz de la imagen.

Desplegar

Vercel: configura APP_BASE_URL a https://rank.ouroborosapps.com, configura STORAGE_BACKEND=blob y conecta un almacén Blob para que Vercel inyecte BLOB_READ_WRITE_TOKEN. vercel.json envía cada ruta a la función Node y agrupa logo.jpg en esa función. /logo.jpg y las rutas de la aplicación son servidas por la función. /package.json no es un archivo estático. El remoto en server.json es https://rank.ouroborosapps.com/mcp.

El nombre del registro es io.github.LAHutchins91/rank. El icono es https://rank.ouroborosapps.com/logo.jpg.

Variables de entorno

VariableRequerida para
APP_BASE_URLorigen público; determina la URI de redirección de Google
PORTpuerto de escucha, predeterminado 44721
GOOGLE_CLIENT_IDinicio de sesión de Google y Search Console
GOOGLE_CLIENT_SECRETintercambio de tokens de Google
TOKEN_ENCRYPTION_KEYcifrado de tokens de actualización y firma de la sesión del navegador
STORAGE_BACKENDmemory, file, blob o postgres
STORAGE_FILEruta del backend de archivo
STORAGE_BLOB_PATHruta del blob, predeterminado rank/store.json
BLOB_READ_WRITE_TOKENtoken de lectura-escritura de Vercel Blob, inyectado en Vercel
DATABASE_URLbackend de postgres
STRIPE_SECRET_KEYCheckout y el portal de facturación
STRIPE_PRICE_MONTHLYid de precio de Checkout mensual
STRIPE_PRICE_YEARLYid de precio de Checkout anual
STRIPE_WEBHOOK_SECRETfirmas de webhook de Stripe

RANK_TEST_HOOKS=1 permite que las pruebas completen el inicio de sesión de MCP sin Google. El proceso se niega a iniciar cuando eso está configurado y NODE_ENV=production.

Licencia

MIT. Copyright (c) 2026 Lawrence Hutchins.


Más de Ouroboros: https://ouroborosapps.com