Enterprise Networking & Observability Update (Proxy, Harpoon, OAuth, Admin UI)
Executive summary
Since v0.0.2, tunnel-client has moved from a single-lane MCP bridge to a more enterprise-ready platform with:
- first-class outbound proxy controls and proxy health visibility
- Harpoon, an embedded allowlisted outbound HTTP Client MCP service used for OAUth discovery and registration
- custom CA bundle support for private PKI environments
- expanded OAuth discovery diagnostics and runtime visibility
- a significantly upgraded monitoring/admin UI for day-2 operations
This release is focused on enterprise network compatibility, safer outbound access patterns, and better operator observability.
Major features
1) Outbound proxy support (enterprise networking)
tunnel-client now supports explicit outbound proxy routing across major traffic paths:
- global proxy:
--http-proxy - control plane:
--control-plane.http-proxy - MCP default and per-channel overrides:
--mcp.http-proxy,--mcp.server-url="...,http-proxy=..." - Harpoon:
--harpoon.http-proxy
Key behaviors:
- explicit proxy settings can be sourced directly or from
env:VARNAME - deterministic precedence is now documented and enforced
- when an explicit proxy is set for a route, environment proxy rules (including
NO_PROXY) are ignored for that route - proxy identity and route mode (
directvsproxy) are exposed in the admin UI - proxy reachability checks run continuously (
--proxy.check-interval) with status/history visible in UI and metrics
Why it matters:
- easier deployment in locked-down enterprise networks
- faster diagnosis of proxy outages and route misconfiguration
2) Harpoon added (embedded constrained outbound HTTP MCP)
Harpoon is a built-in MCP server/channel (harpoon) for controlled outbound HTTP calls.
What Harpoon is:
- an embedded tool surface for calling pre-registered targets by label
- not a free-form HTTP client for arbitrary destinations
- used for OAuth flows that require controlled outbound calls, including:
- OAuth discovery
- OAuth client registration
- token refresh
What it provides:
- target allowlisting via
--harpoon.target="label=...,url=...,desc=..." - request guardrails (method/header restrictions, timeout, size, redirect limits)
- optional payload capture for debugging (
--harpoon.capture-payloads) - optional additional transport exposure for Harpoon MCP (
--harpoon.additional-transport=http-streamable) - private-host registration filters to help govern what can be auto-included
Operational behavior:
- the
harpoonchannel is enabled only when at least one valid target is registered - otherwise
harpooncommands returnunsupported_channel
Why it matters:
- enables controlled outbound integrations without exposing raw arbitrary egress
- improves security posture for tool-driven HTTP workflows
3) Custom CA bundles for private PKI
tunnel-client now supports additive trust extension with:
--ca-bundle /path/to/ca-bundle.pem(orCA_BUNDLE)
Scope:
- applies to outbound TLS connections used by control plane, MCP HTTP, OAuth discovery, and Harpoon
- does not replace system trust; it extends it
Visibility:
- trust metadata is logged at startup
- admin UI System tab reports bundle path, certificate count, parse status/errors, and certificate metadata
Why it matters:
- supports enterprises with internal/intermediate CAs and TLS-intercepting proxies
4) OAuth discovery improvements and diagnostics
OAuth handling has been expanded with a dedicated discovery pipeline and visibility:
- startup discovery of OAuth Protected Resource Metadata
- discovery URL prioritization and retry handling
- discovery state exposed in admin UI (
/api/oauth) with timeline/status details - auth-server metadata fetch integration and surfaced selection details
- discovered host information can be published for internal routing/registration flows
Existing OAuth forwarding behavior remains in place:
Authorizationforwarding for MCP calls- discovery URL/resource rewriting to tunnel-service endpoints for the same tunnel
Why it matters:
- easier OAuth onboarding/debugging with clear runtime diagnostics instead of opaque failures
5) Monitoring/admin UI overhaul
The embedded web UI was significantly upgraded (Svelte/TypeScript build pipeline + embedded static assets).
New or expanded operator views:
- Overview: control plane status, tunnel metadata, channel availability, proxy mode/source
- Metrics: key poll/queue/worker health from Prometheus metrics
- OAuth: discovery timeline and metadata fetch detail
- Harpoon: status, targets, recent calls, policy/proxy visibility
- System: TLS trust report, proxy identity map, route reachability + history
- Logs: live SSE stream with filter/pause/search and optional attribute expansion
Why it matters:
- substantially better day-2 operability from a single local console (
/ui)
Additional notable changes
- channel-aware routing introduced (
main,harpoon, and additional configured channels) - response payloads now include resolved
channel - JSON-RPC notifications can be forwarded during streaming flows when connector requests
text/event-stream - SSE behavior is now explicit and documented: connector must request SSE;
GET /v1/mcpis not a streaming endpoint - expanded test coverage across proxy, Harpoon, OAuth, CA bundles, and UI behavior
Operator impact / migration notes
mainchannel binding is now explicitly required- proxy behavior is more explicit and can differ from legacy env-only expectations when route-level proxies are configured
- Harpoon requires explicit target registration before use
- if relying on streamed progress, ensure connector sends
Accept: text/event-stream
Full Changelog: v0.0.2...v.0.0.3