Tools7 min

aki-mcp-sv 1.7.0: three ingress modes, add Cloudflare tunnel

aki-mcp-sv 1.7.0 adds two public edges beside Tailscale Funnel: a Cloudflare tunnel (--tunnel) and self-run PUBLIC_ORIGIN, for regions where Funnel drops.

aki-mcp-sv 1.7.0: three ingress modes, add Cloudflare tunnel

aki-mcp-sv 1.7.0 (2026-08-14) lets you swap the server's public edge. Beside the default Tailscale Funnel, you can now run through your own Cloudflare tunnel with the --tunnel flag, or point straight at an HTTPS origin you run yourself via the PUBLIC_ORIGIN variable. This release exists to solve one specific situation: in some network regions, the Funnel edge intermittently drops individual requests even while its status still reads "on".

What is the Funnel per-request-drop problem?

Tailscale Funnel stays the default path and is unchanged, but in some regions it drops individual requests even when tailscale funnel status reads "on". The symptom is easy to spot: the server is healthy and the funnel reports on, yet an external client occasionally can't connect, and the log stops at the authorization step with no following request.

This is not a bug in the server code; it happens right at the TLS layer of the Funnel edge. 1.7.0 does not fix Funnel, it gives you a way out: move TLS termination entirely to a different edge that you control.

Three ingress modes and their precedence

From 1.7.0 there are three ways to expose the server to the internet, chosen by a clear precedence: --tunnel > PUBLIC_ORIGIN > Tailscale Funnel. Whichever is declared earliest in that order wins; declare nothing and the default is still Funnel, exactly as before, with no change to old behavior.

  • Cloudflare tunnel (--tunnel): runs a named tunnel through cloudflared as the public edge instead of Funnel. JSON credentials mode only; --origin is required to supply the hostname; the forward port is fixed at 9999.
  • PUBLIC_ORIGIN (bring your own edge): point this variable at any stable HTTPS origin you run yourself and the server skips Tailscale entirely.
  • Tailscale Funnel (default): pass nothing and everything runs just as before.

How do you use --tunnel and PUBLIC_ORIGIN?

For the Cloudflare tunnel, pass the JSON credentials file and the hostname the tunnel is bound to:

bash
npm start -- --tunnel <cred.json> --origin https://your-host

For a self-run origin, set PUBLIC_ORIGIN to your HTTPS edge and start as usual:

bash
PUBLIC_ORIGIN=https://your-host npm start
Warning

No measurement yet proves Cloudflare is more reliable than Funnel. The drop-rate test is still design-only. So treat --tunnel and PUBLIC_ORIGIN as options for when Funnel is unreliable in your region, not as a claim that Cloudflare is definitively better.

What if someone hands you a tunnel JSON?

If a host who owns the domain has already created the tunnel and DNS route and sends you the credentials JSON, you need no Cloudflare account of your own. Just install cloudflared and run with the exact origin they assigned to you.

This path turns onboarding into a paste step: the domain owner handles the edge infrastructure, and you only run the server on your machine and receive requests through the hostname they assigned.

Panel and a few things set right

Panel section 0 no longer reports a false Tailscale failure when you intentionally run your own tunnel; instead it names the active ingress path and the serving origin.

  • The setup wording now names the actual "custom instructions" field instead of a "header"/"preferences" field no app has.
  • The AkiDevRule update banner no longer reappears after you have already updated.
  • The macOS shell whitelist gains open, sips, and ffmpeg for local media handling.

Three new macOS media commands

The macOS shell whitelist adds three commands for handling images and video right on the machine: open to open a file with its default app, sips to resize and convert images, and ffmpeg to cut and transcode video. All three sit inside the deny-by-default whitelist like every other command, and do not break the only-declared-commands-run model.

See why aki-mcp-sv chose a whitelist over a blocklist in the security architecture analysis, and the project introduction for the full picture.

Related