Ntfy

Um servidor MCP ntfy para enviar/buscar notificações ntfy para seu servidor ntfy auto-hospedado a partir de Agentes de IA 📤 (suporta autenticação segura por token e mais - use com npx ou docker!)

Documentação

ntfy-me-mcp

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

Um servidor Model Context Protocol (MCP) simplificado para enviar notificações via serviço ntfy (público ou auto-hospedado com suporte a token) 📲

Visão Geral

O ntfy-me-mcp fornece aos assistentes de IA a capacidade de enviar notificações em tempo real para seus dispositivos através do serviço ntfy.sh (público ou auto-hospedado com suporte a token). Seja notificado quando sua IA concluir tarefas, encontrar erros ou atingir marcos importantes - tudo sem monitoramento constante.

O servidor inclui recursos inteligentes como detecção automática de URL para criar ações de visualização e detecção inteligente de formatação markdown, facilitando para assistentes de IA criar notificações ricas e interativas sem configuração extra.

PréviaDisponível via
autodetect-preview
NomeLink / Selo
ntfy.shDestaque no ntfy.sh
Glama.aintfy-me-mcp MCP server
Smithery.aismithery badge
MseeP.aintfy-me-mc-mseepai
Archestra.aiTrust Score

Recursos

  • 🚀 Configuração Rápida: Execute com npx ou docker!
  • 🔔 Notificações em Tempo Real: Receba atualizações no seu celular/desktop quando as tarefas forem concluídas
  • 🎨 Notificações Ricas: Suporte para tópico, título, prioridades, tags de emoji e mensagens detalhadas
  • 🔍 Busca de Notificações: Busque e filtre mensagens em cache dos seus tópicos ntfy
  • 🎯 Links de Ação Inteligentes: Detecta automaticamente URLs em mensagens e cria ações de visualização
  • 📄 Markdown Inteligente: Detecta e ativa automaticamente a formatação markdown quando presente
  • 🔒 Seguro: Autenticação opcional com tokens de acesso
  • 🔑 Mascaramento de Entrada: Armazene com segurança seu token ntfy na sua configuração vs!
  • 🌐 Suporte a Auto-hospedagem: Funciona com ntfy.sh e instâncias ntfy auto-hospedadas

Em breve...

  • 📨 E-mail: Envie notificações por e-mail (requer configuração do servidor de e-mail ntfy)
  • 🔗 URLs de clique: Capacidade de personalizar URLs de clique
  • 🖼️ URLs de imagem: Detecção inteligente de URL de imagem para incluir automaticamente URLs de imagem em mensagens e notificações
  • 🏁 e mais!

Índice

SeçãoTópicos
Início Rápido - Configuração do Servidor MCP Exemplos de Configuração
Instalação Configurando o Receptor de Notificações
Configuração Variáveis de Ambiente
Autenticação
    ↳ Manuseio Seguro de Token (vscode)
Ferramentas & Uso ntfy_me: Enviando Notificações
    ↳ Usando Linguagem Natural
    ↳ Exemplo de Uso
    ↳ Parâmetros de Mensagem
ntfy_me_fetch: Consultando Notificações
    ↳ Usando Linguagem Natural
    ↳ Exemplo de Uso
    ↳ Parâmetros de Busca
Desenvolvimento & Contribuições
Licença

Início Rápido - Configuração do Servidor MCP

Escolha a forma de configuração que corresponde ao seu cliente. Todos os exemplos abaixo usam NTFY_TOPIC como variável obrigatória e mantêm as configurações de autenticação opcionais comentadas até que você precise delas.

Exemplos de Configuração

TipoCaso de UsoExemplo
NPM / NPXRecomendado para a maioria dos clientes MCP quando você deseja a configuração mais leve.
Mostrar configuração
{
  "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"
    }
  }
}
LocalUse um checkout local quando você estiver desenvolvendo ou alterando o próprio servidor.
Substitua /absolute/path/to/ntfy-me-mcp/build/index.js após a compilação.
Mostrar configuração
{
  "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"
    }
  }
}
DockerUse uma configuração conteinerizada quando o Docker já fizer parte do seu ambiente.
   - DockerHub: gitmotion/ntfy-me-mcp:latest
   - GHCR: ghcr.io/gitmotion/ntfy-me-mcp:latest
Mostrar configuração
{
  "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"
    }
  }
}
OpenCodeAdicione ao opencode.json na raiz do seu projeto (para configuração em nível de projeto) ou ao ~/.config/opencode/opencode.json (para configuração global). Usa "mcp" como chave de nível superior com type: "local" e command como um array.
Mostrar configuração
{
  "$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"
      }
    }
  }
}
ClaudeCodeAdicione ao .mcp.json na raiz do seu projeto (compartilhado com sua equipe via controle de versão), ou ao ~/.claude.json para acesso em nível de usuário em todos os projetos.
Mostrar configuração
{
  "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 CLIAdicione ao ~/.copilot/mcp-config.json para acesso em nível de usuário em todas as sessões. Use type: "local" para servidores baseados em stdio como este.
Mostrar configuração
{
  "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": ["*"]
    }
  }
}
Autenticação por TokenNecessário para tópicos protegidos ou servidores auto-hospedados. Consulte Manuseio Seguro de Token (vscode) ou defina NTFY_TOKEN diretamente.
Mostrar configuração
{
  "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"
    }
  }
}

Instalação

Se você precisar instalar e executar o servidor diretamente (alternativa à configuração MCP acima):

OpçãoExemplo
Instalar globalmente
Instale uma vez, execute em qualquer lugar com o comando ntfy-me-mcp.
npm install -g ntfy-me-mcp
Executar com npx
Sem necessidade de instalação — ideal para uma execução rápida e única ou para testes.
npx ntfy-me-mcp
Instalar localmente
Clone o repositório, instale as dependências, compile e execute via npm start.
Mostrar etapas
# Clone o repositório, instale as dependências, configure o .env, compile e execute
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
Instalação com um comando para Claude Desktop via Smithery.
Mostrar comando
npx -y @smithery/cli install @gitmotion/ntfy-me-mcp --client claude

Configurando o Receptor de Notificações

Ver seção do receptor ntfy
  1. Instale o aplicativo ntfy no seu dispositivo
  2. Assine o tópico escolhido (o mesmo da sua configuração NTFY_TOPIC)

Configuração

Variáveis de Ambiente

Crie um arquivo .env copiando o exemplo: cp .env.example .env — consulte .env.example para referência.

VariávelObrigatóriaPadrãoDescrição
NTFY_TOPICSimO tópico ntfy para publicar notificações
NTFY_URLNãohttps://ntfy.shURL do servidor ntfy — altere para instâncias auto-hospedadas
(inclua a porta se necessário, ex.: https://your-server.com:8443)
NTFY_TOKENNãoToken de acesso para tópicos protegidos ou servidores privados

Autenticação

Ver seção de Autenticação

Este servidor MCP suporta endpoints ntfy autenticados e não autenticados:

  • Tópicos Públicos: Ao usar tópicos públicos no ntfy.sh ou em outros servidores públicos, nenhuma autenticação é necessária.
  • Tópicos Protegidos:
    • Para tópicos protegidos ou servidores privados, você precisa fornecer um token de acesso via variável de ambiente NTFY_TOKEN ou no parâmetro accessToken da ferramenta.
    • Se a autenticação for necessária, mas não for fornecida, você receberá uma mensagem de erro clara explicando como adicionar seu token.

Manuseio Seguro de Token (vscode)

  • Se o seu cliente suportar entradas secretas baseadas em prompt (ou seja, VS Code), prefira isso em vez de codificar NTFY_TOKEN em arquivos de configuração. (Caso contrário, use seu token diretamente)
  • Use valores correspondentes como estes no seu arquivo mcp.json:
Mostrar exemplo de mcp.json do 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}"
      }
    }
  }
}

CampoValorFinalidade
env.NTFY_TOKEN"${input:ntfy_token}"Referencia o valor do token seguro com suporte a prompt
inputs[].id"ntfy_token"Define o nome da entrada usado por NTFY_TOKEN
inputs[].type"promptString"Solicita ao usuário o token em tempo de execução

Se o cliente resolver "${input:ntfy_token}" antes da inicialização, o servidor recebe o token real diretamente. Se o espaço reservado for passado sem alterações, o ntfy-me-mcp detecta essa referência de entrada não resolvida e solicita o token por conta própria na inicialização.

Desde v1.4.0+, a variável de ambiente PROTECTED_TOPIC foi removida. Esse manuseio agora é detectado automaticamente a partir da referência de entrada não resolvida NTFY_TOKEN.

Ferramentas e Uso

ntfy_me: Enviando Notificações

Usando Linguagem Natural

  • Ao trabalhar com seu assistente de IA, você pode usar frases naturais para solicitar notificações:
"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"

Exemplo de Uso

EntradaSaída
{
  "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 da Mensagem

ParâmetroDescriçãoObrigatórioDetalhes / Exemplo
titleO título da notificaçãoSim
messageO corpo da notificaçãoSim
urlURL personalizada do servidor ntfyNãoPadrão: NTFY_URL
topicTópico ntfy personalizadoNãoPadrão: NTFY_TOPIC
accessTokenToken de acesso para tópicos protegidosNãoPadrão: NTFY_TOKEN
priorityNível de prioridade da mensagemNãoPadrão: "default"
Opções: min, low, default, high, max
tagsMatriz de tags de notificação. Suporta códigos curtos de emoji para indicadores visuais — veja a lista completa.Não warning → ⚠️
white_check_mark → ✅
rocket → 🚀
tada → 🎉
markdownBooleano para habilitar a formatação markdown. Detectado automaticamente quando há sintaxe markdown presente (cabeçalhos, listas, blocos de código, links, negrito/itálico) — não é necessário definir explicitamente. Pode ser sobrescrito manualmente.Não Detecção automática: nenhuma configuração necessária.

Exemplo de sobrescrita manual
{
  title: "Task Complete",
  message: "Regular plain text message",
  markdown: false  // Force disable
}
actionsMatriz de objetos de ação de visualização para links clicáveis. URLs no corpo da mensagem são detectadas automaticamente (até 3 ações). Para controle manual, cada ação requer action, label e url, com um sinalizador opcional clear.Não
Exemplo de detecção automática
{
  title: "Build Complete",
  message: "View at https://github.com/org/repo/pull/123"
}
Cria automaticamente ações de visualização para URLs detectadas.
Exemplo de configuração 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: Consultando Notificações

Usando Linguagem Natural

Assistentes de IA entendem várias maneiras de solicitar a busca de mensagens:

"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"

Exemplo de Uso

EntradaSaída
{
  "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 Busca

ParâmetroDescriçãoObrigatórioDetalhes / Exemplo
urlURL personalizada do servidor ntfyNãoPadrão: NTFY_URL
topicTópico do qual buscar mensagensNãoPadrão: NTFY_TOPIC

{ "topic": "updates", "since": "all" }
accessTokenToken de acesso para tópicos protegidosNãoPadrão: NTFY_TOKEN
sinceAté onde voltar para recuperar mensagensNão Opções: '10m', '1h', '1d', timestamp, ID da mensagem ou 'all'
Exemplo: { "since": "30m" }
messageIdEncontrar uma mensagem específica pelo seu IDNão{ "messageId": "xxxxXXXXxxxx" }
messageTextEncontrar mensagens contendo texto exatoNão{ "messageText": "Build Complete" }
messageTitleEncontrar mensagens com título/assunto exatoNão{ "messageTitle": "Build Complete", "priorities": "high", "since": "1d" }
prioritiesEncontrar mensagens com níveis de prioridade específicosNão{ "priorities": "high" }
tagsEncontrar mensagens com tags específicasNão{ "tags": ["error", "warning"] }

Desenvolvimento e Contribuições

Contribuições são bem-vindas! Consulte CONTRIBUTING.md, que inclui diretrizes gerais, etapas de configuração, etc.

Licença

Este projeto está licenciado sob a GNU General Public License v3.0 — consulte o arquivo LICENSE para detalhes.


Feito com ❤️ por gitmotion