QR for Agent

Servidor MCP de códigos QR dinámicos para agentes de IA: crea, actualiza y rastrea códigos QR.

Documentación

QR for Agent

benswel/qr-for-agent-api MCP server

API QR-como-servicio construida para agentes de IA. Crea, actualiza y rastrea códigos QR dinámicos programáticamente mediante API REST o MCP (37 herramientas).

Los códigos QR apuntan a URLs cortas (/r/:shortId) que puedes redirigir en cualquier momento: la imagen del QR nunca cambia, pero al escanearlo se va al nuevo destino. Multi-tenant por diseño, con análisis completos de escaneos.

API en vivo: api.qrforagent.com  |  Sitio: qrforagent.com  |  MCP: qr-for-agent

Características

  • Códigos QR dinámicos — cambia la URL de destino sin regenerar la imagen
  • 11 tipos de QR — URL, vCard, WiFi, Email, SMS, Phone, Event, Text, Location, Social, App Store
  • Estilo personalizado — formas de puntos (square, rounded, dots, classy-rounded), estilos de esquinas, colores, degradados, inserción de logotipos, marcos con texto CTA
  • SVG y PNG — salida vectorial y de mapa de bits
  • Análisis enriquecidos — tipo de dispositivo, navegador, SO, país, ciudad, referente, escaneos por día
  • Webhooks en tiempo real — cargas firmadas con HMAC-SHA256 y registro de entrega
  • Seguimiento UTM — añade automáticamente parámetros UTM a las URLs de redirección
  • Soporte GTM — página intermedia con fragmentos de Google Tag Manager
  • Redirecciones condicionales — enruta por dispositivo, SO, país, idioma, rango de tiempo o división A/B
  • Dominios personalizados — los usuarios Pro personalizan las URLs cortas con su propio dominio (qr.yourbrand.com/r/abc123)
  • Expiración y programación — expira códigos QR automáticamente o programa cambios de URL
  • Seguimiento de conversiones — píxel de seguimiento + API para eventos posteriores al escaneo (compras, registros) con análisis de ROI
  • Marcos y plantillas — marcos decorativos alrededor de los códigos QR (banner_top, banner_bottom, rounded) con texto CTA
  • Operaciones por lotes — crea, actualiza o elimina hasta 50 códigos QR por solicitud, o hasta 500 mediante carga CSV (Pro)
  • Multi-tenant — cada clave API solo ve sus propios datos
  • Servidor MCP — qr-for-agent con 37 herramientas para Claude Desktop, Cursor, etc.
  • Cuotas basadas en plan — Gratis (10 QR, 1K escaneos/mes) y Pro ($19/mes, ilimitado)
  • Registro de autoservicio — POST /api/register con correo electrónico, sin tarjeta de crédito
  • Integración con Stripe — checkout, portal de facturación, gestión de planes impulsada por webhooks
  • Documentación OpenAPI — Swagger UI en /documentation
  • Descubrible por IA — /.well-known/ai-plugin.json y /.well-known/mcp.json
  • Código abierto — licencia MIT, autoalojable mediante Docker

Inicio rápido

git clone https://github.com/benswel/qr-for-agent-api.git
cd qr-for-agent-api
npm install
npm run dev

En el primer inicio, se genera automáticamente una clave API y se imprime en la consola.

curl -X POST http://localhost:3100/api/qr \
  -H "Content-Type: application/json" \
  -H "X-API-Key: qr_YOUR_KEY_HERE" \
  -d '{"target_url": "https://example.com", "label": "My first QR"}'

Endpoints de la API

Gestión de códigos QR (requiere X-API-Key)

MétodoRutaDescripción
POST/api/qrCrear un código QR (11 tipos, estilo personalizado)
GET/api/qrListar todos los códigos QR (paginado)
GET/api/qr/:shortIdObtener detalles de un código QR
PATCH/api/qr/:shortIdActualizar URL de destino, etiqueta, UTM, GTM, reglas de redirección
DELETE/api/qr/:shortIdEliminar código QR y sus análisis
GET/api/qr/:shortId/imageDescargar imagen QR (regenerada con el estilo almacenado)
POST/api/qr/bulkCrear hasta 50 códigos QR (todo o nada)
PATCH/api/qr/bulkActualizar hasta 50 códigos QR (éxito parcial)
DELETE/api/qr/bulkEliminar hasta 50 códigos QR (éxito parcial)
POST/api/qr/bulk/csvCrear hasta 500 códigos QR desde CSV (solo Pro)

Análisis (requiere X-API-Key)

MétodoRutaDescripción
GET/api/analytics/:shortIdEstadísticas de escaneo con desgloses por dispositivo, navegador, SO, país, ciudad + conversiones

Conversiones (requiere X-API-Key)

MétodoRutaDescripción
POST/api/conversionsRegistrar un evento de conversión para un código QR que posees
GET/api/conversions/:shortIdObtener estadísticas de conversión (totales, por_evento, por_día, recientes)

Webhooks (requiere X-API-Key)

MétodoRutaDescripción
POST/api/webhooksRegistrar endpoint de webhook (devuelve secreto HMAC)
GET/api/webhooksListar todos los webhooks
DELETE/api/webhooks/:idEliminar un webhook

Dominio personalizado (requiere X-API-Key, solo Pro)

MétodoRutaDescripción
GET/api/domainObtener dominio personalizado actual y estado de DNS
PUT/api/domainEstablecer dominio personalizado
DELETE/api/domainEliminar dominio personalizado

Cuenta (requiere X-API-Key)

MétodoRutaDescripción
GET/api/usageUso y cuota actuales
POST/api/stripe/checkoutCrear sesión de Stripe Checkout (actualizar a Pro)
POST/api/stripe/portalAbrir portal de facturación de Stripe

Público (sin autenticación)

MétodoRutaDescripción
POST/api/registerRegistro de clave API de autoservicio (con límite de velocidad)
GET/r/:shortIdRedirigir a la URL de destino (registra escaneo)
GET/t/:shortIdPíxel de seguimiento de conversiones (devuelve GIF 1×1)
GET/i/:shortIdServir imagen QR (almacenable en caché)
GET/healthVerificación de salud
GET/documentationSwagger UI
GET/.well-known/ai-plugin.jsonManifiesto de plugin de IA
GET/.well-known/mcp.jsonManifiesto de descubrimiento MCP

Administración (requiere cabecera X-Admin-Secret)

MétodoRutaDescripción
GET/api/admin/keysListar todas las claves API registradas
GET/api/admin/statsMétricas del panel

Autenticación

Todos los endpoints /api/* requieren una cabecera X-API-Key.

  • Formato: qr_ + cadena aleatoria de 32 caracteres
  • Generación automática: en el primer inicio si no existen claves
  • Multi-tenant: cada clave solo ve sus propios códigos QR
  • Crear una clave: npm run key:create "my-label"
  • Listar claves: npm run key:list

Los endpoints públicos (/r/*, /i/*, /health, /documentation, /.well-known/*) no requieren autenticación.

Servidor MCP

Publicado como qr-for-agent en npm. 37 herramientas para que los agentes de IA gestionen códigos QR de forma nativa.

npx qr-for-agent

Claude Desktop / Cursor

Añade a tu configuración de MCP (claude_desktop_config.json o .cursor/mcp.json):

{
  "mcpServers": {
    "qr-for-agent": {
      "command": "npx",
      "args": ["-y", "qr-for-agent"],
      "env": {
        "API_KEY": "your-api-key",
        "BASE_URL": "https://api.qrforagent.com"
      }
    }
  }
}

Herramientas disponibles (37)

HerramientaDescripción
create_qr_codeCrear un código QR de URL con estilo personalizado opcional
get_qr_codeObtener detalles de un código QR por ID corto
update_qr_destinationCambiar a dónde redirige un código QR
list_qr_codesListar todos los códigos QR con paginación
delete_qr_codeEliminar un código QR y sus análisis
get_qr_analyticsObtener estadísticas de escaneo y desgloses
bulk_create_qr_codesCrear hasta 50 códigos QR a la vez
bulk_update_qr_codesActualizar hasta 50 códigos QR a la vez
bulk_delete_qr_codesEliminar hasta 50 códigos QR a la vez
create_vcard_qrCrear un código QR de contacto vCard
create_wifi_qrCrear un código QR de credenciales WiFi
create_email_qrCrear un código QR de correo electrónico (mailto:)
create_sms_qrCrear un código QR de SMS
create_phone_qrCrear un código QR de llamada telefónica
create_event_qrCrear un código QR de evento de calendario
create_text_qrCrear un código QR de texto plano
create_location_qrCrear un código QR de geolocalización
create_social_qrCrear un código QR de enlaces a redes sociales
create_app_store_qrCrear un código QR de redirección inteligente a tienda de aplicaciones
update_vcard_qrActualizar un código QR de vCard
update_wifi_qrActualizar un código QR de WiFi
update_social_qrActualizar un código QR de redes sociales
update_app_store_qrActualizar un código QR de tienda de aplicaciones
create_webhookRegistrar un endpoint de webhook
list_webhooksListar todos los webhooks registrados
delete_webhookEliminar un webhook
registerRegistrarse para obtener una clave API
get_usageObtener uso y cuota actuales
upgrade_to_proCrear una sesión de Stripe Checkout
manage_billingAbrir portal de facturación de Stripe
set_utm_paramsEstablecer parámetros de seguimiento UTM en un código QR
set_redirect_rulesEstablecer reglas de redirección condicional en un código QR
set_custom_domainEstablecer o eliminar dominio personalizado (Pro)
get_custom_domainObtener dominio personalizado actual y estado de DNS
bulk_create_from_csvCrear hasta 500 códigos QR desde datos CSV (Pro)
record_conversionRegistrar un evento de conversión posterior al escaneo
get_conversionsObtener estadísticas de conversión para un código QR

Configuración

Copia .env.example a .env y edita:

VariablePredeterminadoDescripción
PORT3100Puerto HTTP
HOST0.0.0.0Dirección de enlace
BASE_URLhttp://localhost:3100URL pública (usada en URLs cortas)
DATABASE_URL./data/qr-agent.dbRuta del archivo SQLite
SHORT_ID_LENGTH8Longitud de los IDs cortos generados
ADMIN_SECRET(ninguno)Secreto para endpoints de administración (cabecera X-Admin-Secret)
STRIPE_SECRET_KEY(ninguno)Clave secreta de la API de Stripe
STRIPE_WEBHOOK_SECRET(ninguno)Secreto de firma de webhooks de Stripe
STRIPE_PRICE_ID(ninguno)ID de precio de Stripe para el plan Pro

Base de datos

SQLite con Drizzle ORM. Seis tablas:

  • api_keys — almacenamiento de claves con etiqueta, correo electrónico, plan (gratis/pro), IDs de Stripe, dominio personalizado
  • qr_codes — metadatos del QR, URLs de destino, tipo/type_data, opciones de estilo, UTM, GTM, reglas de redirección, expiración/programación
  • scan_events — seguimiento de escaneos: marca de tiempo, user-agent, referer, IP, dispositivo, navegador, SO, país, ciudad
  • webhooks — endpoints de webhook por clave API, secreto HMAC, eventos suscritos
  • webhook_deliveries — registro de entrega: estado, código de respuesta, mensajes de error
  • conversion_events — seguimiento de conversiones: nombre del evento, valor, metadatos, referer, IP, marca de tiempo
npm run db:generate   # Generate migration from schema changes
npm run db:migrate    # Apply pending migrations
npm run db:studio     # Open Drizzle Studio (web UI)

Las migraciones se ejecutan automáticamente al iniciar el servidor.

Despliegue

Docker

docker compose up -d

La base de datos se persiste en un volumen de Docker.

Railway

El proyecto incluye railway.toml y un Dockerfile de múltiples etapas. Conecta tu repositorio de GitHub a Railway: se compila y despliega automáticamente con verificaciones de salud en /health.

Pruebas

195 pruebas de integración que cubren todos los endpoints, autenticación, aislamiento multi-tenant, tipos de QR, webhooks, operaciones por lotes, dominios personalizados, marcos, conversiones, carga CSV y análisis.

npm test           # Run all tests
npm run test:watch # Watch mode

Scripts

ScriptDescripción
npm run devIniciar servidor de desarrollo con recarga automática
npm run buildCompilar TypeScript
npm startEjecutar servidor de producción
npm testEjecutar suite de pruebas
npm run test:watchPruebas en modo observador
npm run key:createCrear clave API
npm run key:listListar claves API
npm run db:generateGenerar migración
npm run db:migrateEjecutar migraciones
npm run db:studioAbrir Drizzle Studio

Licencia

MIT