Agents can call out.
Now the world can call in.

Webhooks and tunnels your agent can set up by itself. Give Claude Code, Cursor or any agent a permanent webhook URL, a public link to localhost, an email inbox and scheduled jobs. The webhooks keep answering even when your agent is offline.

Everything that needs to reach your agent.

Two main tools and two extras, under one login. Your agent can drive all of them through MCP or the CLI.

Webhooks

A permanent URL that always answers.

shop-7f3.otterkit.app● live
POSTpayment_intent.succeededverified
POSTpull_request.openedverified
POSTinvoice.payment_failedinvalid
  • Replies to every sender, day and night, with your status, headers, body or rules
  • Checks signatures from Stripe, GitHub, Shopify, Slack and 12 more as requests arrive
  • Stores every request, which you can inspect, replay with edits or export
  • Forwards to your URL (signed, with retries) or alerts you by email or push

Tunnels

Put localhost on a public HTTPS link.

terminal

$ npx otterkit tunnel 3000 --subdomain myapp

https://myapp.otterkit.app → localhost:3000

GET / 200 12ms

POST /api/hooks 200 48ms

  • Any local port, one command, no config
  • Keep the same subdomain every time, so provider settings never change
  • Password protection, auto-stop timer and background mode
  • Records traffic and replays any request after you fix the code

Email inboxes

An email address your agent can read.

Turn on mail for any webhook endpoint. Sign-in codes, magic links and signup emails show up in the same feed, and your agent can wait for them.

Scheduled pulses

Cron jobs and check-ins that run for you.

Call a URL every 30 seconds up to once a day, with every response saved. Or get a check-in URL, and an email if your job misses one.

How it works

Your agent can sleep. The edge stays up.

Webhooks, inboxes and pulses run on OtterKit, not on your machine. Events are held until your agent asks for them.

THE OUTSIDE WORLD

Stripe sends a webhook

checkout.session.completed

GitHub opens a PR

pull_request.opened

A signup email arrives

Your code is 482913

It's time for the 10-minute job

pulse · GET /cron/sync

A teammate opens your dev server

myapp.otterkit.app → :3000

OTTERKIT EDGEalways on
Answers the sender
Checks the signature
Stores every request
Forwards or alerts

YOUR AGENT, ANYWHERE

Claude Code on your laptop

Lid closed. Events wait on the edge.

Cursor in your editor

Waiting for the next pull_request event.

A cloud sandbox or CI job

Headless, with an API token.

Anything that speaks MCP

npx otterkit mcp

Use cases

You ask. Your agent sets it up.

Once OtterKit is connected, you don't need a dashboard. Here are things people ask for, and the tools the agent uses to do them.

Webhooks

Wait for the Stripe test payment, then check that the order is marked paid.

Creates an endpoint that checks Stripe's signature, adds it in Stripe and waits for the event to arrive.

webhook_create · request_await

Tunnels

Point the GitHub app's webhook at my laptop so I can debug the handler.

Opens a tunnel on a subdomain that doesn't change and records each delivery. After a fix, it replays the one that failed.

tunnel_create · request_replay

Webhooks

Ping my phone whenever a payment fails, even if my laptop is off.

Adds a push alert that fires only for signed payment.failed events. Nothing needs to run on your machine.

webhook_forwarding · push

Tunnels

Send the designer a password-protected link to my dev server for today.

Opens an HTTPS tunnel with a password that shuts itself off at the end of the day.

tunnel_create

Email inbox

Sign up on staging and finish the email verification yourself.

Gets a new otterkit.app email address, signs up with it and reads the code from the email that arrives.

webhook_create email · request_await

Pulses

Hit the sync endpoint every 10 minutes and email me if it starts failing.

Sets up a scheduled call that runs on OtterKit's servers. Emails you when it starts failing and again when it recovers.

pulse_create

OtterKit for Mac

Free

Every tunnel and webhook in one window.

Watch everything on your account live, whether it was started from the app, the terminal or your agent. The app is optional, and webhooks keep answering when it's closed.

  • One-click tunnels

    The app finds ports already open on your Mac. One click gives any of them a public URL.

  • Edit while it runs

    Change settings on anything that's running, including sessions your agent started.

  • Spending limits

    Tunnels stop when your Mac sleeps, idle ones get a reminder, and the menu bar shows what you're on track to spend this month.

macOS 12+ · signed and notarized · updates itself

One login. Use it however you work.

MCP server

Every feature as a native tool for Claude Code, Cursor and other MCP clients.

CLI

Built for agents. Every command can output JSON, and await blocks until the request you expect shows up.

Web console

Browse history, edit response rules, set up forwarding and custom domains.

Mac appFree

Every tunnel and webhook in one live window, with spend in the menu bar.

Pricing

$0.01per connected hour

Capped at $3 per endpoint every 30 days. Hours past the cap are free.

Prepaid credits, no subscription, and they never expire. Pulses are 1 credit per 100 runs. New accounts get free credits to start.

Start free

Questions

No. Webhook endpoints, inboxes and pulses run on OtterKit's edge. They answer senders, check signatures and store every request while your machines are off, and your agent reads them when it's back. Only tunnels need your machine, because they point at a local port.

Give your agent an address.

Start free
Read the docs