emit MCP
RSS MCP programável — qualquer fonte para e-mail, Slack ou webhook. Pague por envio, sem taxa por assinante.
Documentação
US$ 1,60 por 1.000 e-mails
US$ 0 por assinante
Recarga mínima de US$ 10 · sem cartão para começar
3 chamadas para conectar o pipeline
Pare de verificar. Comece a assinar.
Cada pipeline abaixo é real e pode ser construído nos próximos cinco minutos — uma chamada de API ou alguns cliques. Cada um termina em uma URL de feed RSS, um e-mail, uma mensagem no Slack ou um POST JSON para o seu próprio código.
blog→email
Publique uma vez. Nós cuidamos do envio.
Cada nova publicação vira um e-mail limpo e legível para sua lista, a partir do seu próprio domínio. Cerca de mil envios por US$ 1,60.
page→slack
Pare de atualizar. Receba notificações.
Monitore qualquer URL — páginas de preços, concorrentes, avisos. Sua equipe fica sabendo de mudanças no Slack, mesmo que a página nunca tenha tido um feed.
changelog→webhook
Lançamentos direto no seu pipeline.
Novas versões das suas dependências disparam um webhook — abra uma issue, inicie uma CI, avise o canal. JSON limpo, sem precisar escrever um poller.
Um pipeline de envio. Não um CMS.
O emit MCP faz as quatro tarefas chatas entre "você publicou um post" e "alguém abriu o e-mail", e nada mais.
$
Sem taxa por assinante
10.000 leitores que você envia e-mail duas vezes por mês não deveriam custar o mesmo que um disparo diário. Você é cobrado por e-mail enviado — ponto final.
1 crédito · 1 e-mail · pré-pago
@
Seu domínio, entregabilidade real
Envie a partir de um domínio verificado via Resend ou Amazon SES com DKIM, tratamento de bounce e reclamações, cabeçalhos list-unsubscribe e opt-out em um clique já incluídos.
posts@seudominio.dev · SPF · DMARC
{ }
Tudo é uma API
Uma especificação OpenAPI 3.1 tipada, chaves bearer, gravações idempotentes e webhooks assinados para eventos importantes. Nenhum painel que você seja forçado a usar — conecte e esqueça.
API REST compacta · cliente com < 200 linhas de código
Três chamadas para um 200 OK ao vivo.
01 Crie uma conta POST /v1/accounts
# returns an emit_live_… key, shown once
curl -X POST api.rssemit.com/v1/accounts \
-d '{"name":"My Blog",
"email":"me@blog.dev"}'
02 Conecte um feed POST /v1/feeds
# polled every 5m · conditional GET
curl -X POST api.rssemit.com/v1/feeds \
-H "Authorization: Bearer $KEY" \
-d '{"url":"…/rss.xml",
"from_email":"posts@blog.dev"}'
03 Recarregue e vá POST /v1/billing/topup
# $20 ≈ 12,500 emails. autopilot.
curl -X POST api.rssemit.com/v1/billing/topup \
-H "Authorization: Bearer $KEY" \
-d '{"amount_usd":20}'
# one-time: verify your email + sending
# domain (DNS), then new posts mail
# themselves
Construído para que seu agente de codificação configure tudo sozinho.
Enviamos uma especificação OpenAPI tipada, um servidor MCP de uso único e uma skill do Claude Code que cuidam da verificação de domínio, registros DNS, importação de assinantes e da primeira transmissão — em uma única conversa.
Claude Code skill Codex CLI Cursor MCP server
Cole no Claude Code, Cursor, Codex ou em qualquer agente com acesso à API — ele pergunta qual caso de uso você quer primeiro e só configura o que for necessário (configurações de Slack/Discord pulam as etapas de domínio e financiamento por completo).
~/blog · claude code
● Lendo CLAUDE.md, feed encontrado em /rss.xml.
● Verificando domínio blog.dev…
emit.create_account → emit_live_••• emitido
emit.verify_domain → 3 registros DNS adicionados a vercel.app
emit.connect_feed → posts@blog.dev · polling a cada 5 min
emit.import_subscribers → 1.284 de buttondown.csv
● Concluído. Seu próximo post será enviado para 1.284 assinantes. Créditos para 3,9 mil e-mails em arquivo.
>
Um endpoint. Qualquer linguagem.
Sem SDKs para perseguir entre versões. Autenticação bearer, JSON na entrada, JSON na saída.
# Send a one-off broadcast to all confirmed subscribers
curl -X POST https://api.rssemit.com/v1/broadcasts \
-H "Authorization: Bearer $EMIT_KEY" \
-H "Content-Type: application/json" \
-d '{
"subject": "Shipping Emit v1.4",
"body_html": "<h1>We shipped.</h1>",
"feed_id": "8Hk2q9f1-…"
}'
# → { "id": "8Hk2q9f1…", "status": "queued", "recipient_count": 4218 }
// node 20 · zero deps
const r = await fetch("https://api.rssemit.com/v1/broadcasts", {
method: "POST",
headers: {
"Authorization": \`Bearer ${process.env.EMIT_KEY}\`,
"Content-Type": "application/json",
},
body: JSON.stringify({
subject: "Shipping Emit v1.4",
body_html: "<h1>We shipped.</h1>",
feed_id: "8Hk2q9f1-…",
}),
});
const { id, recipient_count } = await r.json();
console.log(\`queued ${recipient_count} to ${id}\`);
# python 3.11 · stdlib only
import os, json, urllib.request as u
req = u.Request(
"https://api.rssemit.com/v1/broadcasts",
method="POST",
headers={
"Authorization": f"Bearer {os.environ['EMIT_KEY']}",
"Content-Type": "application/json",
},
data=json.dumps({
"subject": "Shipping Emit v1.4",
"body_html": "<h1>We shipped.</h1>",
"feed_id": "8Hk2q9f1-…",
}).encode(),
)
res = json.loads(u.urlopen(req).read())
print(f"queued {res['recipient_count']} to {res['id']}")
// go 1.22
body, _ := json.Marshal(map[string]any{
"subject": "Shipping Emit v1.4",
"body_html": "<h1>We shipped.</h1>",
"feed_id": "8Hk2q9f1-…",
})
req, _ := http.NewRequest("POST",
"https://api.rssemit.com/v1/broadcasts",
bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer " + os.Getenv("EMIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
# ruby 3.3
require "net/http"; require "json"
uri = URI("https://api.rssemit.com/v1/broadcasts")
req = Net::HTTP::Post.new(uri, {
"Authorization" => "Bearer #{ENV['EMIT_KEY']}",
"Content-Type" => "application/json",
})
req.body = {
subject: "Shipping Emit v1.4",
body_html: "<h1>We shipped.</h1>",
feed_id: "8Hk2q9f1-…",
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts JSON.parse(res.body)["id"]
US$ 1,60 por 1.000 créditos — um e-mail custa um. Criar feeds é grátis; você paga apenas quando o trabalho roda. Preços completos →
Um e-mail legível, não um artefato de marketing.
O template padrão é texto puro primeiro, compatível com HTML, seguro para modo escuro e respeita a tipografia do seu post. Substitua-o por feed com seu próprio HTML bruto via o template_html do feed.
preview posts@blog.dev → reader@hey.com
html · 41 kb
blog.dev · edição nº 042 · 26 de maio
Como o conditional GET mantém o polling barato
Monitoramos 14.000 feeds RSS a cada cinco minutos. Aqui está o truque do ETag que reduz 92% dessas requisições a um 304 — e por que isso importa para a sua conta.
A resposta ingênua é "armazenar em cache o corpo do feed e comparar". Isso funciona até você estar atingindo 14 mil publicadores por ciclo, sua conta de egress deixar de fazer sentido e metade desses publicadores estiver rodando instâncias de WordPress que te odeiam pessoalmente.
você está recebendo isto porque se inscreveu em blog.dev · cancelar inscrição
<!-- raw HTML, rendered with Jinja. Set
per feed via template_html. Variables:
title, body, url, unsubscribe_url -->
<h1>{{ title }}</h1>
<div>{{ body }}</div>
<a href="{{ url }}">
Continue reading →
</a>
<hr>
<p>
<a href="{{ unsubscribe_url }}">
Unsubscribe
</a>
</p>
Perguntas que você faria antes de pagar.
Perguntas sobre preços — créditos, plano gratuito, bounces — são respondidas na página de preços. Se a sua não estiver em nenhum dos dois lugares, will@heltonlabs.com — um humano lê.
Posso receber um feed como JSON em vez de e-mail?
Sim — isso é uma transmissão JSON. Aponte qualquer URL de feed, inclusive uma que você não possui, para seu endpoint e cada novo item chega como application/json com um cabeçalho X-Emit-Event: sink.item; o corpo é {"event","sink_id","name","item"}. Defina o agendamento para diário ou semanal e o emit MCP agrupa tudo em um único POST sink.digest com um array items. Sem poller, sem parsing de XML, sem cron — veja RSS para webhook.
Como o feed RSS é monitorado?
A cada cinco minutos por padrão, com conditional GET (If-None-Match + If-Modified-Since). Você pode alternar para o modo on_publish e fazer POST para /v1/feeds/{id}/ping a partir de um webhook para entrega instantânea.
Meu agente de codificação pode configurar tudo?
Esse é o objetivo do design. O emit MCP envia uma especificação OpenAPI 3.1 em arquivo único, um servidor MCP e uma skill do Claude Code, para que add a newsletter to my blog using emit no Claude Code ou Codex possa fazer registros DNS, verificação de domínio, importação de assinantes e a primeira transmissão sem que você saia do terminal.
De quais domínios vocês enviam?
Dos seus. Você verifica um domínio (geramos os registros DKIM, SPF e DMARC), e cada envio vai from: posts@yourdomain.dev. Nenhum <@rssemit.com> jamais aparece nas caixas de entrada dos seus assinantes.
Onde meus dados ficam armazenados?
Postgres em us-east-1. Nunca vendemos dados de assinantes — não há nada nisso para nós, e isso destruiria a única coisa que vendemos.