Referencia del servidor MCP
Revolink admite el Model Context Protocol (MCP): un estándar abierto que permite a los asistentes de IA (Claude, Cursor, Windsurf y otros) interactuar con servicios externos como herramientas.
Una vez configurado, tu asistente de IA puede crear enlaces, actualizar reglas de enrutamiento y consultar la analítica sin que tengas que salir del chat.
Endpoint
POST https://api.revolink.link/apiv1/mcp
Transporte: Streamable HTTP (sin estado, una petición por cada llamada a una herramienta).
Autenticación
MCP de Revolink admite dos formas de conectarse. Elige la que mejor encaje en tu caso:
| Clave de API | OAuth 2.0 | |
|---|---|---|
| Ideal para | Scripts, herramientas de desarrollo, automatización | claude.ai web, apps, equipos |
| Configuración | Genera una clave y pégala en la configuración | Solo pega la URL y aprueba el acceso |
| Gestión de claves | Tú gestionas la clave | Ninguna: se hace automáticamente |
Método 1: clave de API
Genera una clave en Perfil → Integraciones, activa los permisos (scopes) de MCP que necesites y pásala en la configuración de tu cliente. Consulta Configuración más abajo para las instrucciones de cada cliente.
Errores:
| HTTP | Causa |
|---|---|
401 | Falta la clave de API o no es válida, o la clave ha caducado |
403 | La clave existe pero no tiene permisos de MCP activados |
Método 2: OAuth 2.0
Para clientes como claude.ai (web) que admiten OAuth: no hace falta clave. Apruebas el acceso una vez y el cliente se encarga de todo automáticamente.
Cómo conectar (claude.ai web):
- Ve a Settings → Integrations en claude.ai.
- Haz clic en Add MCP server.
- Pega:
https://api.revolink.link/apiv1/mcp - Haz clic en Connect: te redirigirá a Revolink para aprobar el acceso.
- Listo. Las herramientas de Revolink ya están disponibles en tu chat.
Para revocar el acceso en cualquier momento: Perfil → Aplicaciones conectadas → Revocar.
Permisos de MCP
Los permisos de MCP son independientes de los permisos normales de la API. Una clave puede tener acceso completo a la API pero ninguno a MCP, o al revés. Permisos (scopes) disponibles:
| Permiso | Qué desbloquea |
|---|---|
links:read | list_links, get_link |
links:write | create_link, update_link |
links:delete | delete_link |
links:bulk | bulk_create_links |
analytics:read | get_link_analytics, get_workspace_analytics |
Con autenticación por clave de API, los permisos se configuran por clave en Perfil → Integraciones → MCP dentro de la aplicación.
Con OAuth, los permisos los solicita el cliente y los aprueba el usuario durante el flujo de consentimiento.
Configuración
Clave de API: paso a paso
- Ve a Perfil → Integraciones en la aplicación de Revolink.
- Haz clic en Crear clave de API.
- Ponle un nombre a la clave (p. ej.
Claude MCP). - En MCP, activa los permisos que quieras conceder. Cada permiso se puede activar de forma independiente.
- Haz clic en Crear y copia la clave: se muestra una sola vez.
Una clave con MCP activado pero sin permisos de MCP seleccionados será rechazada en el endpoint de MCP con un error
403.
Configura tu cliente de IA (clave de API)
Claude Desktop (claude_desktop_config.json)
Claude Desktop usa transporte stdio. Usa el puente mcp-remote para conectar con el endpoint HTTP de Revolink.
{
"mcpServers": {
"revolink": {
"command": "npx",
"args": [
"mcp-remote",
"https://api.revolink.link/apiv1/mcp",
"--header",
"X-Api-Key:YOUR_API_KEY"
]
}
}
}
Ábrelo desde: menú de Claude → Settings → Developer → Edit Config. Reinicia Claude Desktop después de guardar.
Claude Code (CLI)
claude mcp add --transport http revolink https://api.revolink.link/apiv1/mcp \
--header "X-Api-Key: YOUR_API_KEY"
O añádelo a .claude/settings.json:
{
"mcpServers": {
"revolink": {
"type": "http",
"url": "https://api.revolink.link/apiv1/mcp",
"headers": {
"X-Api-Key": "YOUR_API_KEY"
}
}
}
}
Cursor / Windsurf (.cursor/mcp.json or .codeium/windsurf/mcp_config.json)
{
"mcpServers": {
"revolink": {
"url": "https://api.revolink.link/apiv1/mcp",
"headers": {
"X-Api-Key": "YOUR_API_KEY"
}
}
}
}
VS Code (.vscode/mcp.json)
{
"servers": {
"revolink": {
"type": "http",
"url": "https://api.revolink.link/apiv1/mcp",
"headers": {
"X-Api-Key": "${input:revolinkApiKey}"
}
}
},
"inputs": [
{
"id": "revolinkApiKey",
"type": "promptString",
"description": "Revolink API Key",
"password": true
}
]
}
Requiere VS Code 1.99+ con GitHub Copilot. El aviso ${input:revolinkApiKey} te pedirá la clave la primera vez que lo uses.
Zed (~/.config/zed/settings.json)
{
"context_servers": {
"revolink": {
"settings": {
"url": "https://api.revolink.link/apiv1/mcp",
"api_key": "YOUR_API_KEY"
}
}
}
}
Configura tu cliente de IA (OAuth)
claude.ai (web)
No hace falta configuración. Cuando añadas un nuevo servidor MCP en claude.ai → Settings → Integrations, introduce:
https://api.revolink.link/apiv1/mcp
Claude te redirigirá automáticamente a la página de consentimiento de Revolink.
Espacios de trabajo: selección automática
Nunca necesitas indicar un ID de espacio de trabajo a mano. Cuando envías una petición sin elegir un espacio de trabajo, el servidor devuelve la lista de tus espacios de trabajo disponibles. La IA elige el adecuado según el contexto y continúa la operación automáticamente. Desde tu punto de vista es invisible: solo describe lo que necesitas con lenguaje natural.
Herramientas disponibles
list_links
Devuelve una lista paginada de los enlaces de un espacio de trabajo.
Permiso necesario: links:read
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
page | integer | — | Número de página (por defecto: 1) |
limit | integer | — | Enlaces por página, de 1 a 100 (por defecto: 20) |
search | string | — | Filtra por nombre o slug |
tagIds | string[] | — | Filtra por ID de etiquetas |
get_link
Devuelve todos los detalles de un enlace, incluidas sus reglas de enrutamiento.
Permiso necesario: links:read
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
linkId | string | ✅ | ID del enlace |
create_link
Crea un enlace inteligente nuevo con reglas de enrutamiento.
Permiso necesario: links:write
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
name | string | ✅ | Nombre del enlace (máx. 255 caracteres) |
rules | Rule[] | ✅ | Reglas de enrutamiento: consulta el Objeto de regla más abajo. Exactamente una debe tener isDefault: true |
slug | string | — | Slug personalizado (minúsculas, se permiten guiones). Se genera automáticamente si se omite |
domain | string | — | Dominio personalizado. Por defecto, el del espacio de trabajo |
description | string | — | Nota interna (máx. 1000 caracteres) |
active | boolean | — | Si el enlace está activo (por defecto: true) |
tagIds | string[] | — | ID de las etiquetas que se asocian |
clicksLimit | integer | — | Desactiva el enlace tras N clics. 0 = sin límite |
expirationDate | string | — | Fecha y hora ISO 8601. El enlace se desactiva después de esta fecha |
conversionTracking | boolean | — | Activa el píxel de conversión |
gpsTracking | boolean | — | Activa la captura de ubicación GPS al hacer clic |
abTest | AbTest | — | Configuración de la prueba A/B: consulta el Objeto de prueba A/B más abajo |
Ejemplo de petición:
«Crea un enlace llamado "Product Hunt Launch" que envíe a los visitantes de escritorio a la landing de escritorio y a los visitantes móviles a la landing móvil.»
update_link
Actualiza un enlace existente. Incluye solo los campos que quieras cambiar.
Permiso necesario: links:write
Los mismos parámetros que create_link, además de:
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
linkId | string | ✅ | ID del enlace que se va a actualizar |
ogTitle | string | — | Título OG que se muestra al compartir el enlace en redes sociales (máx. 255 caracteres) |
ogDescription | string | — | Descripción OG para las vistas previas en redes sociales (máx. 500 caracteres) |
appearanceColor | string | — | Color de marca en hex (p. ej. #FF5733) |
Cuando se indica
rules, todo el array de reglas se sustituye. Incluye todas las reglas que quieras conservar, no solo las modificadas. La IA obtiene internamente los ID de las reglas existentes antes de actualizar.
delete_link
Elimina un enlace de forma permanente.
Permiso necesario: links:delete
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
linkId | string | ✅ | ID del enlace que se va a eliminar |
bulk_create_links
Crea varios enlaces en una sola petición. Sujeto a la cuota de enlaces del plan.
Permiso necesario: links:bulk
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
links | LinkInput[] | ✅ | Array de objetos de enlace (de 1 a 100). Cada uno tiene los mismos campos que create_link |
La respuesta incluye los arrays created (correctos) y failed (fallidos, con el motivo), por lo que es posible un éxito parcial.
get_link_analytics
Devuelve la analítica de clics de un enlace, desglosada por país, dispositivo, navegador, sistema operativo, regla de enrutamiento y variante A/B.
Permiso necesario: analytics:read
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
linkId | string | ✅ | ID del enlace |
from | string | — | Fecha de inicio YYYY-MM-DD (por defecto: todo el tiempo) |
to | string | — | Fecha de fin YYYY-MM-DD (por defecto: hoy) |
get_workspace_analytics
Devuelve la analítica de clics agregada de todos los enlaces de un espacio de trabajo.
Permiso necesario: analytics:read
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
from | string | — | Fecha de inicio YYYY-MM-DD (por defecto: todo el tiempo) |
to | string | — | Fecha de fin YYYY-MM-DD (por defecto: hoy) |
Objeto de regla
Todo enlace debe tener al menos una regla. Exactamente una regla debe tener isDefault: true: es el respaldo cuando no se cumplen las condiciones de ninguna otra regla. La regla predeterminada no puede tener ninguna condición.
| Campo | Tipo | Descripción |
|---|---|---|
targetUrl | string | URL de destino (obligatorio) |
isDefault | boolean | true para la regla de respaldo (obligatorio) |
country | string[] | Códigos ISO 3166-1 alpha-2, p. ej. ["UA", "DE"] |
city | string[] | Nombres de ciudad. Requiere indicar country |
device | string[] | "desktop" "mobile" "tablet" "console" "smarttv" "wearable" "embedded" |
os | string[] | "Windows" "macOS" "Linux" "iOS" "Android" |
browser | string[] | "Chrome" "Firefox" "Safari" "Edge" "Opera" "Brave" |
timeStart | string | Inicio de la franja activa "HH:MM" UTC. Debe ir con timeEnd |
timeEnd | string | Fin de la franja activa "HH:MM" UTC. Debe ir con timeStart |
daysOfWeek | integer[] | Días: 0 = domingo … 6 = sábado |
locale | string[] | Códigos de idioma del navegador, p. ej. ["uk", "en"] |
name | string | Etiqueta opcional para esta regla |
Objeto de prueba A/B
Cuando abTest.enabled es true, los clics se reparten entre las variantes según sus pesos. Las reglas de enrutamiento se siguen aplicando primero: el reparto A/B solo ocurre para los visitantes que coinciden con una regla determinada.
| Campo | Tipo | Descripción |
|---|---|---|
enabled | boolean | true para activar las pruebas A/B |
variants | Variant[] | Se requieren al menos 2 variantes cuando está activada |
Variante:
| Campo | Tipo | Descripción |
|---|---|---|
url | string | URL de destino de esta variante |
weight | number | Porcentaje relativo del tráfico. P. ej. 70 y 30 significa un reparto 70 %/30 % |
Gestión de errores
El servidor MCP devuelve errores JSON-RPC estándar. Los errores a nivel de herramienta usan estos códigos:
| Código | Significado |
|---|---|
-32602 | Parámetros no válidos: entrada incorrecta (error de validación, slug ocupado, etc.) |
-32603 | Error interno: fallo del lado del servidor |
Errores a nivel HTTP (antes de llamar a la herramienta):
| HTTP | Causa |
|---|---|
401 | Falta la clave de API / token Bearer o no es válido |
403 | La clave no tiene permisos de MCP activados, o el propietario de la clave no tiene acceso al espacio de trabajo |
404 | Espacio de trabajo no encontrado |
Ejemplos de llamadas a herramientas
Lista tus enlaces:
«Muéstrame todos los enlaces de mi espacio de trabajo con la etiqueta
summer-sale.»
Crea un enlace con segmentación geográfica:
«Crea un enlace llamado "App Download". Envía a los usuarios de iOS a la App Store, a los de Android a Google Play y a todos los demás al sitio web.»
Actualiza las reglas de enrutamiento:
«Actualiza el enlace
664a1b2c…: añade una regla que redirija a los visitantes de Alemania ahttps://de.example.com.»
Obtén la analítica de la semana pasada:
«¿Cuáles fueron los países principales del enlace
664a1b2c…la semana pasada?»