Ntfy

Un servidor MCP ntfy para enviar/recibir notificaciones ntfy a tu servidor ntfy autoalojado desde Agentes de IA 📤 (soporta autenticación segura por token y más - ¡úsalo con npx o docker!)

Documentación

ntfy-me-mcp

TypeScript Model Context Protocol NPM Version Docker Image Version License GitHub Buy me a coffee

Un servidor de Protocolo de Contexto de Modelo (MCP) simplificado para enviar notificaciones a través del servicio ntfy (público o autoalojado con soporte de tokens) 📲

Resumen

ntfy-me-mcp proporciona a los asistentes de IA la capacidad de enviar notificaciones en tiempo real a tus dispositivos a través del servicio ntfy.sh (ya sea público o autoalojado con soporte de tokens). Recibe notificaciones cuando tu IA completa tareas, encuentra errores o alcanza hitos importantes, todo sin necesidad de monitoreo constante.

El servidor incluye funciones inteligentes como detección automática de URL para crear acciones de vista y detección inteligente de formato markdown, lo que facilita a los asistentes de IA crear notificaciones ricas e interactivas sin configuración adicional.

Vista previaDisponible en
autodetect-preview
NombreEnlace / Insignia
ntfy.shDestacado en ntfy.sh
Glama.aintfy-me-mcp MCP server
Smithery.aismithery badge
MseeP.aintfy-me-mc-mseepai
Archestra.aiTrust Score

Características

  • 🚀 Configuración rápida: ¡Ejecuta con npx o docker!
  • 🔔 Notificaciones en tiempo real: Recibe actualizaciones en tu teléfono/escritorio cuando las tareas se completan
  • 🎨 Notificaciones enriquecidas: Soporte para tema, título, prioridades, etiquetas emoji y mensajes detallados
  • 🔍 Obtención de notificaciones: Obtén y filtra mensajes en caché de tus temas ntfy
  • 🎯 Enlaces de acción inteligentes: Detecta automáticamente URLs en mensajes y crea acciones de vista
  • 📄 Markdown inteligente: Detecta y habilita automáticamente el formato markdown cuando está presente
  • 🔒 Seguro: Autenticación opcional con tokens de acceso
  • 🔑 Enmascaramiento de entrada: ¡Almacena de forma segura tu token ntfy en tu configuración de vs!
  • 🌐 Soporte autoalojado: Funciona tanto con ntfy.sh como con instancias ntfy autoalojadas

Próximamente...

  • 📨 Correo electrónico: Envía notificaciones por correo electrónico (requiere configuración del servidor de correo ntfy)
  • 🔗 URLs de clic: Capacidad para personalizar URLs de clic
  • 🖼️ URLs de imágenes: Detección inteligente de URLs de imágenes para incluir automáticamente URLs de imágenes en mensajes y notificaciones
  • 🏁 ¡y más!

Tabla de Contenidos

SecciónTemas
Inicio rápido - Configuración del servidor MCP Ejemplos de configuración
Instalación Configuración del receptor de notificaciones
Configuración Variables de entorno
Autenticación
    ↳ Manejo seguro de tokens (vscode)
Herramientas y uso ntfy_me: Envío de notificaciones
    ↳ Uso de lenguaje natural
    ↳ Ejemplo de uso
    ↳ Parámetros del mensaje
ntfy_me_fetch: Consulta de notificaciones
    ↳ Uso de lenguaje natural
    ↳ Ejemplo de uso
    ↳ Parámetros de consulta
Desarrollo y contribuciones
Licencia

Inicio rápido - Configuración del servidor MCP

Elige la forma de configuración que coincida con tu cliente. Todos los ejemplos a continuación usan NTFY_TOPIC como la variable requerida y mantienen las opciones de autenticación opcionales comentadas hasta que las necesites.

Ejemplos de configuración

TipoCaso de usoEjemplo
NPM / NPXRecomendado para la mayoría de clientes MCP cuando deseas la configuración más ligera.
Mostrar configuración
{
  "ntfy-me-mcp": {
    "command": "npx",
    "args": ["-y", "ntfy-me-mcp"],
    "env": {
      "NTFY_TOPIC": "your-ntfy-topic",
      "NTFY_URL": "https://ntfy.sh",
      // "NTFY_TOKEN": "add-your-ntfy-token"
    }
  }
}
LocalUsa una copia local cuando estés desarrollando o modificando el servidor tú mismo.
Reemplaza /absolute/path/to/ntfy-me-mcp/build/index.js después de compilar.
Mostrar configuración
{
  "ntfy-me-mcp": {
    "command": "node",
    "args": ["/absolute/path/to/ntfy-me-mcp/build/index.js"],
    "env": {
      "NTFY_TOPIC": "your-ntfy-topic",
      "NTFY_URL": "https://ntfy.sh",
      // "NTFY_TOKEN": "add-your-ntfy-token"
    }
  }
}
DockerUsa una configuración contenerizada cuando Docker ya forme parte de tu entorno.
   - DockerHub: gitmotion/ntfy-me-mcp:latest
   - GHCR: ghcr.io/gitmotion/ntfy-me-mcp:latest
Mostrar configuración
{
  "ntfy-me-mcp": {
    "command": "docker",
    "args": [
      "run",
      "-i",
      "--rm",
      "-e",
      "NTFY_TOPIC",
      "-e",
      "NTFY_URL",
      "-e",
      "NTFY_TOKEN",
      "gitmotion/ntfy-me-mcp:latest"
    ],
    "env": {
      "NTFY_TOPIC": "your-ntfy-topic",
      "NTFY_URL": "https://ntfy.sh",
      // "NTFY_TOKEN": "add-your-ntfy-token"
    }
  }
}
OpenCodeAgrega a opencode.json en la raíz de tu proyecto (para configuración a nivel de proyecto) o a ~/.config/opencode/opencode.json (para configuración global). Usa "mcp" como clave de nivel superior con type: "local" y command como un arreglo.
Mostrar configuración
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ntfy-me-mcp": {
      "type": "local",
      "command": ["npx", "-y", "ntfy-me-mcp"],
      "environment": {
        "NTFY_TOPIC": "your-ntfy-topic",
        "NTFY_URL": "https://ntfy.sh",
        // "NTFY_TOKEN": "add-your-ntfy-token"
      }
    }
  }
}
ClaudeCodeAgrega a .mcp.json en la raíz de tu proyecto (compartido con tu equipo mediante control de versiones), o a ~/.claude.json para acceso a nivel de usuario en todos los proyectos.
Mostrar configuración
{
  "mcpServers": {
    "ntfy-me-mcp": {
      "command": "npx",
      "args": ["-y", "ntfy-me-mcp"],
      "env": {
        "NTFY_TOPIC": "your-ntfy-topic",
        "NTFY_URL": "https://ntfy.sh",
        "NTFY_TOKEN": "${NTFY_TOKEN}"
      }
    }
  }
}
Copilot CLIAgrega a ~/.copilot/mcp-config.json para acceso a nivel de usuario en todas las sesiones. Usa type: "local" para servidores basados en stdio como este.
Mostrar configuración
{
  "mcpServers": {
    "ntfy-me-mcp": {
      "type": "local",
      "command": "npx",
      "args": ["-y", "ntfy-me-mcp"],
      "env": {
        "NTFY_TOPIC": "your-ntfy-topic",
        "NTFY_URL": "https://ntfy.sh",
        "NTFY_TOKEN": "your-access-token"
      },
      "tools": ["*"]
    }
  }
}
Autenticación por tokenRequerido para temas protegidos o servidores autoalojados. Consulta Manejo seguro de tokens (vscode) o establece NTFY_TOKEN directamente.
Mostrar configuración
{
  "ntfy-me-mcp": {
    "command": "npx",
    "args": ["-y", "ntfy-me-mcp"],
    "env": {
      "NTFY_TOPIC": "your-ntfy-topic",
      "NTFY_URL": "https://your-ntfy-server.com",
      "NTFY_TOKEN": "your-access-token"
    }
  }
}

Instalación

Si necesitas instalar y ejecutar el servidor directamente (alternativa a la configuración MCP anterior):

OpciónEjemplo
Instalar globalmente
Instala una vez, ejecuta en cualquier lugar con el comando ntfy-me-mcp.
npm install -g ntfy-me-mcp
Ejecutar con npx
No requiere instalación: ideal para una ejecución rápida o pruebas.
npx ntfy-me-mcp
Instalar localmente
Clona el repositorio, instala dependencias, compila y ejecuta mediante npm start.
Mostrar pasos
# Clona el repositorio, instala dependencias, configura .env, compila y ejecuta
git clone https://github.com/gitmotion/ntfy-me-mcp.git cd ntfy-me-mcp npm install cp .env.example .env npm run build npm start
MCP Marketplace — Smithery
Instalación con un solo comando para Claude Desktop mediante Smithery.
Mostrar comando
npx -y @smithery/cli install @gitmotion/ntfy-me-mcp --client claude

Configuración del receptor de notificaciones

Ver sección de receptor ntfy
  1. Instala la aplicación ntfy en tu dispositivo
  2. Suscríbete al tema que elijas (el mismo que tu configuración de NTFY_TOPIC)

Configuración

Variables de entorno

Crea un archivo .env copiando el ejemplo: cp .env.example .env — consulta .env.example como referencia.

VariableRequeridaPredeterminadoDescripción
NTFY_TOPICSí—El tema de ntfy al que publicar notificaciones
NTFY_URLNohttps://ntfy.shURL del servidor ntfy — cámbiala para instancias autoalojadas
(incluye el puerto si es necesario, p. ej. https://your-server.com:8443)
NTFY_TOKENNo—Token de acceso para temas protegidos o servidores privados

Autenticación

Ver sección de autenticación

Este servidor MCP admite endpoints ntfy autenticados y no autenticados:

  • Temas públicos: Al usar temas públicos en ntfy.sh u otros servidores públicos, no se requiere autenticación.
  • Temas protegidos:
    • Para temas protegidos o servidores privados, debes proporcionar un token de acceso mediante la variable de entorno NTFY_TOKEN o en el parámetro accessToken de la herramienta.
    • Si se requiere autenticación pero no se proporciona, recibirás un mensaje de error claro que explica cómo agregar tu token.

Manejo seguro de tokens (vscode)

  • Si tu cliente admite entradas secretas basadas en prompts (es decir, VS Code), prefiere eso en lugar de codificar NTFY_TOKEN en archivos de configuración. (De lo contrario, usa tu token directamente)
  • Usa valores coincidentes como estos en tu archivo mcp.json:
Mostrar ejemplo de mcp.json de VS Code
// Add this to your VS Code `mcp.json` file, either the user-level file or your workspace `.vscode/mcp.json`
// Set `NTFY_TOKEN` exactly to `"${input:ntfy_token}"` when you want VS Code to treat it as a secure prompt-backed value.

{
  "inputs": [
    {
      "type": "promptString",
      "id": "ntfy_token",
      "description": "Ntfy Token",
      "password": true
    }
  ],
  "servers": {
    "ntfy-me-mcp": {
      "command": "npx",
      "args": ["-y", "ntfy-me-mcp"],
      "env": {
        "NTFY_TOPIC": "your-ntfy-topic",
        "NTFY_URL": "https://your-ntfy-server.com",
        "NTFY_TOKEN": "${input:ntfy_token}"
      }
    }
  }
}

CampoValorPropósito
env.NTFY_TOKEN"${input:ntfy_token}"Hace referencia al valor de token seguro respaldado por prompt
inputs[].id"ntfy_token"Define el nombre de entrada utilizado por NTFY_TOKEN
inputs[].type"promptString"Solicita al usuario el token en tiempo de ejecución

Si el cliente resuelve "${input:ntfy_token}" antes del lanzamiento, el servidor recibe el token real directamente. Si el marcador de posición se pasa sin cambios, ntfy-me-mcp detecta esa referencia de entrada no resuelta y solicita el token por sí mismo al inicio.

Desde v1.4.0+, la variable de entorno PROTECTED_TOPIC se ha eliminado. Este manejo ahora se detecta automáticamente a partir de la referencia de entrada no resuelta NTFY_TOKEN.

Herramientas y uso

ntfy_me: Envío de notificaciones

Uso con lenguaje natural

  • Cuando trabajes con tu asistente de IA, puedes usar frases naturales para solicitar notificaciones:
"ntfyme with a summary of the task when complete"
"Send me a notification when the build is complete"
"Notify me when the task is done"
"Alert me after generating the code"
"Message me when the process finishes"
"Send an alert with high priority"

Ejemplo de uso

EntradaSalida
{
  "title": "Code Generation Complete",
  "message": "Your React component has been
created successfully with proper
TypeScript typing.",
  "priority": "high",
  "tags": ["white_check_mark", "code", "react"]
}
{
  "success": true,
  "endpoint": "https://ntfy.sh/ntfymetest"
}

Parámetros del Mensaje

ParámetroDescripciónRequeridoDetalles / Ejemplo
titleEl título de la notificaciónSí—
messageEl cuerpo de la notificaciónSí—
urlURL personalizada del servidor ntfyNoPredeterminado: NTFY_URL
topicTema personalizado de ntfyNoPredeterminado: NTFY_TOPIC
accessTokenToken de acceso para temas protegidosNoPredeterminado: NTFY_TOKEN
priorityNivel de prioridad del mensajeNoPredeterminado: "default"
Opciones: min, low, default, high, max
tagsMatriz de etiquetas de notificación. Admite códigos cortos de emoji para indicadores visuales — consulte la lista completa.No warning → ⚠️
white_check_mark → ✅
rocket → 🚀
tada → 🎉
markdownBooleano para habilitar el formato markdown. Se detecta automáticamente cuando hay sintaxis markdown presente (encabezados, listas, bloques de código, enlaces, negrita/cursiva) — no es necesario configurarlo explícitamente. Se puede anular manualmente.No Detección automática: no se necesita configuración.

Ejemplo de anulación manual
{
  title: "Task Complete",
  message: "Regular plain text message",
  markdown: false  // Force disable
}
actionsMatriz de objetos de acción de vista para enlaces clicables. Las URL en el cuerpo del mensaje se detectan automáticamente (hasta 3 acciones). Para control manual, cada acción requiere action, label y url, con un indicador opcional clear.No
Ejemplo de detección automática
{
  title: "Build Complete",
  message: "View at https://github.com/org/repo/pull/123"
}
Crea automáticamente acciones de vista para las URL detectadas.
Ejemplo de configuración manual
{
  title: "Pull Request Review",
  message: "Ready for final checks",
  actions: [
    {
      action: "view",
      label: "View PR",
      url: "https://github.com/org/repo/pull/123"
    },
    {
      action: "view",
      label: "View Changes",
      url: "https://github.com/org/repo/pull/123/files",
      clear: true
    }
  ]
}

ntfy_me_fetch: Consulta de Notificaciones

Uso de Lenguaje Natural

Los asistentes de IA entienden diversas formas de solicitar la recuperación de mensajes:

"Show me my recent notifications"
"Get messages from the last hour"
"Find notifications with title 'Build Complete'"
"Search for messages with the test_tube tag"
"Show notifications from the updates topic from the last 24hr"
"Check my latest alerts"

Ejemplo de Uso

EntradaSalida
{
  "since": "6h"
}
{
  "success": true,
  "messageCount": 1,
  "topics": {
    "ntfymetest": [
      {
        "id": "On4Jeo1ENDCB",
        "time": 1775859291,
        "event": "message",
        "topic": "ntfymetest",
        "message": "Test",
        "title": "Test",
        "priority": 3,
        "expires": 1775902491
      }
    ]
  }
}

Parámetros de Consulta

ParámetroDescripciónRequeridoDetalles / Ejemplo
urlURL personalizada del servidor ntfyNoPredeterminado: NTFY_URL
topicTema del que recuperar mensajesNoPredeterminado: NTFY_TOPIC

{ "topic": "updates", "since": "all" }
accessTokenToken de acceso para temas protegidosNoPredeterminado: NTFY_TOKEN
sinceCuánto tiempo hacia atrás recuperar mensajesNo Opciones: '10m', '1h', '1d', marca de tiempo, ID de mensaje o 'all'
Ejemplo: { "since": "30m" }
messageIdBuscar un mensaje específico por su IDNo{ "messageId": "xxxxXXXXxxxx" }
messageTextBuscar mensajes que contengan texto exactoNo{ "messageText": "Build Complete" }
messageTitleBuscar mensajes con título/asunto exactoNo{ "messageTitle": "Build Complete", "priorities": "high", "since": "1d" }
prioritiesBuscar mensajes con niveles de prioridad específicosNo{ "priorities": "high" }
tagsBuscar mensajes con etiquetas específicasNo{ "tags": ["error", "warning"] }

Desarrollo y Contribuciones

¡Las contribuciones son bienvenidas! Consulte CONTRIBUTING.md, que incluye pautas generales, pasos de configuración, etc.

Licencia

Este proyecto está bajo la Licencia Pública General GNU v3.0 — consulte el archivo LICENSE para más detalles.


Hecho con ❤️ por gitmotion