<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ReceiveHQ</title>
    <description>The latest articles on DEV Community by ReceiveHQ (@receivehq).</description>
    <link>https://dev.to/receivehq</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4118146%2F0035a73e-5150-4af5-b4b0-d25e58b2d798.png</url>
      <title>DEV Community: ReceiveHQ</title>
      <link>https://dev.to/receivehq</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/receivehq"/>
    <language>en</language>
    <item>
      <title>Let your agent receive email when it needs to</title>
      <dc:creator>ReceiveHQ</dc:creator>
      <pubDate>Fri, 11 Sep 2026 08:34:44 +0000</pubDate>
      <link>https://dev.to/receivehq/let-your-agent-receive-email-when-it-needs-to-1g7</link>
      <guid>https://dev.to/receivehq/let-your-agent-receive-email-when-it-needs-to-1g7</guid>
      <description>&lt;p&gt;I'm Sebastian, CTO at &lt;a href="https://receivehq.com" rel="noopener noreferrer"&gt;ReceiveHQ&lt;/a&gt; (Cortena B.V.). This is a concrete walkthrough of one feature we use ourselves: giving Cursor or Claude a real inbound mailbox over MCP, without waiting for a webhook handler to exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Agent workflows often need email mid-task: a vendor sends a confirmation, a support reply lands, a magic link arrives, or you want the agent to triage overnight mail. Most inbound products assume you already have a public HTTPS endpoint and a parser wired up. Agents don't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blackhole first, webhook later
&lt;/h2&gt;

&lt;p&gt;ReceiveHQ endpoints come in two kinds:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Kind&lt;/th&gt;
&lt;th&gt;URL&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;Create an account at &lt;a href="https://receivehq.com" rel="noopener noreferrer"&gt;https://receivehq.com&lt;/a&gt; (magic-link sign-in).&lt;/li&gt;
&lt;li&gt;Add the MCP server to your client:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"receivehq"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://receivehq.com/api/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Start the client — OAuth 2.1 + PKCE opens a browser for login and consent.&lt;/li&gt;
&lt;li&gt;Revoke apps anytime under Settings → MCP in the console.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Endpoint docs live at &lt;a href="https://receivehq.com/mcp.md" rel="noopener noreferrer"&gt;https://receivehq.com/mcp.md&lt;/a&gt; (also &lt;code&gt;/llms.txt&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent quick start
&lt;/h2&gt;

&lt;p&gt;From Cursor, Claude, or another MCP client:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;setup_inbound_domain&lt;/code&gt; with &lt;code&gt;endpointKind: "blackhole"&lt;/code&gt; (no &lt;code&gt;endpointUrl&lt;/code&gt;), or create the domain then &lt;code&gt;create_inbound_domain_endpoint&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Point MX to &lt;code&gt;mx.receivehq.com&lt;/code&gt;, then &lt;code&gt;verify_inbound_domain_mx&lt;/code&gt;.## What else the agent can do&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Tenants, domains, and endpoints (CRUD)&lt;/li&gt;
&lt;li&gt;Search messages, inspect delivery attempts, resend&lt;/li&gt;
&lt;li&gt;Invite teammates&lt;/li&gt;
&lt;li&gt;Billing: Checkout / Customer Portal URLs&lt;/li&gt;
&lt;li&gt;Fetch retained attempt and raw-mail objects by key (14-day evidence window)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scopes: &lt;code&gt;mcp:read&lt;/code&gt; for reads, &lt;code&gt;mcp:admin&lt;/code&gt; for mutations. Tokens are user-scoped across that user's tenants.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this beats "paste the email into chat"
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Real SMTP address on your domain (or a ReceiveHQ receive domain)&lt;/li&gt;
&lt;li&gt;MIME parsed once; raw &lt;code&gt;.eml&lt;/code&gt; retained for support and compliance&lt;/li&gt;
&lt;li&gt;Same account can later fan out to webhooks without re-ingesting history&lt;/li&gt;
&lt;li&gt;Hosted in Germany (Hetzner); DPA / sub-processors / hosting / imprint are public for GDPR buyers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Sign up: &lt;a href="https://receivehq.com" rel="noopener noreferrer"&gt;https://receivehq.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Connect MCP: &lt;code&gt;https://receivehq.com/api/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create a blackhole endpoint and send yourself a test message&lt;/li&gt;
&lt;li&gt;Ask the agent to &lt;code&gt;list_messages&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pricing: €10/mo or €100/yr for up to 100k inbound emails; first 10 free per tenant.&lt;/p&gt;

&lt;p&gt;Trust links: &lt;a href="https://receivehq.com/hosting" rel="noopener noreferrer"&gt;hosting&lt;/a&gt; · &lt;a href="https://receivehq.com/dpa" rel="noopener noreferrer"&gt;DPA&lt;/a&gt; · &lt;a href="https://receivehq.com/sub-processors" rel="noopener noreferrer"&gt;sub-processors&lt;/a&gt; · &lt;a href="https://receivehq.com/imprint" rel="noopener noreferrer"&gt;imprint&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read mail with &lt;code&gt;list_messages&lt;/code&gt; / &lt;code&gt;get_message&lt;/code&gt; / &lt;code&gt;list_deliveries&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When you are ready for production delivery, create or update an endpoint as &lt;code&gt;webhook&lt;/code&gt; with your URL and &lt;code&gt;payloadFormat&lt;/code&gt; (&lt;code&gt;postmark&lt;/code&gt;, Mailgun/SendGrid, or CloudMailin). Same mailbox, no DNS redo.&lt;/p&gt;

&lt;p&gt;| &lt;code&gt;blackhole&lt;/code&gt; | omit / empty | Mail is received, parsed, and stored. Delivery status is &lt;code&gt;blackholed&lt;/code&gt;. No HTTP forward. Works on trial. |&lt;br&gt;
| &lt;code&gt;webhook&lt;/code&gt; | required HTTPS | Same parse, then POST in Postmark / Mailgun-SendGrid / CloudMailin shape |&lt;/p&gt;

&lt;p&gt;Blackhole is the agent-friendly path: capture mail now, decide routing later.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>agents</category>
      <category>email</category>
      <category>webhooks</category>
    </item>
    <item>
      <title>Launching ReceiveHQ: inbound email webhook, hosted in Germany</title>
      <dc:creator>ReceiveHQ</dc:creator>
      <pubDate>Thu, 10 Sep 2026 19:09:40 +0000</pubDate>
      <link>https://dev.to/receivehq/launching-receivehq-inbound-email-webhook-hosted-in-germany-2fb3</link>
      <guid>https://dev.to/receivehq/launching-receivehq-inbound-email-webhook-hosted-in-germany-2fb3</guid>
      <description>&lt;p&gt;We're launching &lt;strong&gt;ReceiveHQ&lt;/strong&gt; — inbound email infrastructure for teams that need SMTP in and HTTPS out, without rewriting webhook handlers or shipping mail through US-first relays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://receivehq.com" rel="noopener noreferrer"&gt;https://receivehq.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;ReceiveHQ receives mail on your domain, parses MIME, and delivers it to your app as webhooks in the same shapes used by Postmark, Mailgun/SendGrid, and CloudMailin. Point your MX records at ReceiveHQ and keep the parser you already trust.&lt;/p&gt;

&lt;p&gt;It is inbound-only, flat-priced, and hosted in Germany for GDPR-minded and EU-only stacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why we built it
&lt;/h2&gt;

&lt;p&gt;Moving off Postmark, Mailgun, SendGrid, or CloudMailin inbound often means two migrations: DNS and the webhook contract. ReceiveHQ makes the second one optional.&lt;/p&gt;

&lt;p&gt;For EU buyers, “maybe an EU region” on a US product is often not enough for invoices, payroll, or support mail. ReceiveHQ runs on German infrastructure by default — not as a checkbox.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features live today
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Drop-in inbound webhooks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Postmark-compatible JSON&lt;/strong&gt;: &lt;code&gt;From&lt;/code&gt;, &lt;code&gt;To&lt;/code&gt;, &lt;code&gt;OriginalRecipient&lt;/code&gt;, &lt;code&gt;TextBody&lt;/code&gt;, &lt;code&gt;HtmlBody&lt;/code&gt;, attachments, headers, raw email, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mailgun / SendGrid multipart&lt;/strong&gt;: &lt;code&gt;text&lt;/code&gt; / &lt;code&gt;html&lt;/code&gt;, &lt;code&gt;body-plain&lt;/code&gt; / &lt;code&gt;body-html&lt;/code&gt;, &lt;code&gt;envelope&lt;/code&gt;, attachment fields, and raw MIME&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudMailin-compatible JSON&lt;/strong&gt;: envelope, headers, plain text, HTML, and base64 attachm- Multi-tenant domains, address filters, and optional Basic auth on webhooks&lt;/li&gt;
&lt;li&gt;14-day retention of raw mail and attempt logs for support/compliance evidence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blackhole endpoints&lt;/strong&gt; to receive and store mail without forwarding, useful when an agent reads the inbox via MCP/API before a webhook URL exists&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agent-native MCP
&lt;/h3&gt;

&lt;p&gt;Connect Cursor, Claude, or another MCP client over &lt;strong&gt;OAuth 2.1 + PKCE&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Endpoint: &lt;code&gt;https://receivehq.com/api/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Configure domains, create blackhole or webhook endpoints, search messages, inspect deliveries, invite teammates, and manage billing from the agent&lt;/li&gt;
&lt;li&gt;Agent docs: &lt;a href="https://receivehq.com/llms.txt" rel="noopener noreferrer"&gt;&lt;code&gt;/llms.txt&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://receivehq.com/mcp.md" rel="noopener noreferrer"&gt;&lt;code&gt;/mcp.md&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  EU / GDPR posture
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hosting declaration: &lt;a href="https://receivehq.com/hosting" rel="noopener noreferrer"&gt;Germany / Hetzner&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://receivehq.com/dpa" rel="noopener noreferrer"&gt;DPA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://receivehq.com/sub-processors" rel="noopener noreferrer"&gt;Sub-processors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://receivehq.com/imprint" rel="noopener noreferrer"&gt;Imprint&lt;/a&gt; (Cortena B.V., Netherlands)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;€10 / month&lt;/strong&gt; for up to &lt;strong&gt;100,000&lt;/strong&gt; inbound emails&lt;/li&gt;
&lt;li&gt;Or &lt;strong&gt;€100 / year&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;First &lt;strong&gt;10&lt;/strong&gt; emails free per tenant, with up to 3 trial tenants&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no outbound bundle required to unlock inbound.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Sign up at &lt;a href="https://receivehq.com" rel="noopener noreferrer"&gt;receivehq.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Add your receive domain and set MX&lt;/li&gt;
&lt;li&gt;Pick the Postmark, Mailgun/SendGrid, or CloudMailin payload format&lt;/li&gt;
&lt;li&gt;Or connect MCP and create a blackhole endpoint to start reading mail immediately&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Webhook API docs are on the site. Feedback is especially welcome from anyone who has migrated an established inbound integration: which provider-specific edge cases were hardest to preserve?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I work on ReceiveHQ as CTO &amp;amp; Co-founder of Cortena B.V.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;—&lt;/p&gt;

&lt;p&gt;Sebastian Lagemann&lt;/p&gt;

&lt;p&gt;&lt;a href="https://receivehq.com" rel="noopener noreferrer"&gt;https://receivehq.com&lt;/a&gt; · &lt;a href="mailto:listings@receivehq.com"&gt;listings@receivehq.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;EU / GDPR-sensitive products that already speak Postmark, Mailgun, SendGrid, or CloudMailin inbound&lt;/li&gt;
&lt;li&gt;Teams tired of SES + SNS + Lambda glue just to get email into an HTTP handler&lt;/li&gt;
&lt;li&gt;Agent workflows that need a real inbound mailbox readable and configurable over MCP
ents&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Production inbound
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;SMTP in → HTTPS out, with multi-endpoint fan-out&lt;/li&gt;
&lt;li&gt;Automatic retry backoff (1m → 5m → 30m → 1h → 2h), per-endpoint attempt limits, and HTTP 406 to permanently drop&lt;/li&gt;
&lt;li&gt;Activity console with message search, delivery attempts, request/response logs, raw &lt;code&gt;.eml&lt;/code&gt;, and resend with &lt;code&gt;To&lt;/code&gt; / &lt;code&gt;OriginalRecipient&lt;/code&gt; overrides&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>api</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
