Debug one service locally.
Leave appsettings alone.
Trailswitch decides, per service, whether a request goes to the copy on your machine or to QA. Set it up once, then switch with a click: no more config edits, no code changes, no redeploys.
Windows 10 and 11 · macOS and Linux soon · Early access
Every service behind one proxy, each with its own Local, QA, or Mock switch. Edges show which calls succeeded and which failed.
Tap a screenshot to see it full size.
Stop rewriting config to test one change.
To run one service locally against everything else on QA, most teams edit base URLs, restart, and hope the edit never gets committed.
Without Trailswitch
appsettings.Development.json {
"Services": {
- "OrdersApi": "https://orders.qa.internal",
+ "OrdersApi": "http://localhost:5101",
"UsersApi": "https://users.qa.internal",
"PaymentsApi": "https://payments.qa.internal"
}
} - Edit the file, restart every caller, and do it again for the next service.
- Remember to undo it, or the localhost URL ends up in a commit.
- Nothing shows you what each request actually did.
With Trailswitch
routes via localhost:9000- /orders routed to Local localhost:5101
- /users routed to QA users.qa.internal
- /payments routed to QA payments.qa.internal
- Flip a service to Local or QA while traffic runs. No restart.
- After one-time setup, config files stay put, so no localhost URL leaks into a commit.
- Every request is captured, so you see where it went and what came back.
One proxy. Every service on its own switch.
Requests reach Trailswitch first. The first path segment names the service, and each service goes wherever you pointed it: your machine, QA, or a mock.
Your app, browser, or test
GET /orders/42
Trailswitch
localhost:9000
capture · route · mock
- /orders Local localhost:5101
- /users QA users.qa.internal
- /payments QA payments.qa.internal
- /inventory Mock mock response
Three ways to send traffic through it
-
Point your app at the gateway
Change the base URL once to localhost:9000/<service>. From then on, Local or QA is a click in the app, never an edit.
localhost:9000/orders/...One-time setup per caller
-
Port intercept
Already calling a service on localhost? Trailswitch takes over that port, so traffic is captured with no URL change at all.
localhost:5101 → capturedWindows asks for admin approval when you turn it on
-
Docker Compose
Pick your docker-compose.yml. Trailswitch sets HTTP_PROXY, HTTPS_PROXY, and the CA certificate on every service for you.
HTTP_PROXY=host.docker.internal:9000Re-run compose to apply
Ask Claude what went wrong.
Trailswitch runs an MCP server on your machine. Connect Claude Code, or any MCP client, and it can read the traffic you just captured, pull up the exact request and response that failed, and replay it after you change something.
Prefer to stay in the app? Explain error sends one failed request to the model you choose, including Claude with your own Anthropic key, and redacts sensitive headers first.
- The MCP server runs while the app is open, on 127.0.0.1 by default, behind a token.
- Requests Claude reads over MCP go to the model you connected, so connect it to the projects where that is fine.
$ claude mcp add trailswitch http://127.0.0.1:9002/mcp -t http -H "Authorization: Bearer <token>" Copy the ready-made command from the app with your token filled in. It also has configs for Cursor, Windsurf, VS Code, and Zed.
-
get_recent_trafficThe latest captured requests: method, URL, status, timing, service.
-
search_trafficFind requests by text across URLs, headers, and bodies.
-
get_request_detailFull headers and bodies for one request.
-
get_service_healthWhich registered services are up.
-
get_sessionsNamed capture sessions and their time ranges.
-
replay_requestSend a captured request again and capture the new result.
Once traffic flows through it
Routing is the start. Because every request passes through one place, the rest of the debugging toolkit is already there.
- Per-service routing
- Each service points at Local, QA, or a mock on its own. Switch while traffic runs.
- Traffic capture
- Every request and response, with headers, bodies, timing, and the chain it belongs to.
- Diff vs QA
- Replay a captured request against QA and compare both responses line by line.
- gRPC and WebSocket mocks
- Answer a call yourself by method or URL pattern. Upstream is never touched.
- Production replay
- Replay HAR imports or live captures against any environment, with a PII scrub first.
- Export as test
- Turn a capture into a Playwright test, a Jest + supertest test, or a curl script.
- Compose injection
- Route a whole docker-compose stack through the proxy without editing it by hand.
- Analytics
- p50, p95, and p99 latency, error rates, and the slowest endpoints per service.
Send what you found to the tools you already use
Connect Notion, Linear, Slack, Sentry, GitHub, or Docker through their MCP servers from the Integrations panel. Notion, Linear, and Slack actions send a request summary, never its body.
-
Notion
Log to NotionRight-click any request to file it as a page in your Notion database, with Method, Status, Latency, Service, and time as properties.
-
Linear
Create Linear issueTurn a failed request into an issue that already lists the service, method, URL, status, latency, and error.
-
Slack
Alert to SlackPost a failed request to a channel so the owner of that service sees it.
-
Sentry
Matching issueWhen a request fails, the related Sentry issue appears beside it in the request detail.
-
GitHub
Commits near the failureSee the commits pushed around the time a service started failing, right next to the request.
-
Docker
Register containersRunning containers show up with their ports, ready to add as services in one click.
Any other MCP server can be added too, and its tools become available alongside Trailswitch's own.
Your captures stay on your machine.
Captured traffic is stored in a local database on your PC, not on a server we run. It leaves your machine only when you export or replay it, or let an AI model you connected read it, and only to where you send it.
Notion, Linear, and Slack actions send a request summary (method, URL, status, latency, service), never the body.
- Runs on
- Windows 10 and 11; macOS and Linux soon
- Stored
- Locally, on your PC
- Exports
- HAR, Playwright, Jest, curl, OTLP
- Status
- Early access
Try it on your own stack.
Trailswitch is built by Hrishikesh Ukarande and in early access on Windows 10 and 11. Send a line about which services you run locally and which stay on QA, and I will get back to you about access.