What's new in Retriever

Found a problem? Report it

0.19.0· Secrets stay on your Mac, and select several at once

Secret values stay on your Mac in a shared workspace. If you keep workspace.json in a folder you chose (a git repository, a synced folder), variables marked secret with the lock are now written there by name only. Their values are kept on your Mac beside your tokens and cookies, so each person fills in their own and a teammate's change never empties yours. Every other value in the file is still shared, including a password or key typed straight into a request's Auth tab; use a secret {{variable}} there to keep it private.

If you used a shared folder with 0.18.0, secret values were written into that file. This version removes them from it the next time it opens, but a git history or a sync service may still hold them, so change those values.

Select several at once. Shift-click a second row in the sidebar to select everything in between. Then right-click to move the selection to any collection or folder or to delete it, press ⌫, or drag it onto a folder. Each is one undo step.

Digest in generated code. Python snippets now sign in with Digest. Swift, JavaScript, Node.js and Go have no built-in Digest support, so their snippets start with a note saying so instead of silently leaving the sign-in out.

AWS Signature. Paths containing ., .. or doubled slashes are now signed the way AWS expects outside S3.

0.18.0· AWS and Digest auth, a workspace you can share, more themes

AWS Signature. The Auth tab has a new choice for AWS APIs: API Gateway, S3, Lambda and the rest. Enter an access key, secret key, region and service (and a session token for temporary credentials), and every send is signed at that moment with Signature Version 4.

Digest auth. Also new in the Auth tab. Your username and password are sent only in answer to the server's challenge, and only to the host the request was addressed to; a redirect somewhere else gets nothing.

Both are read from Postman and Insomnia imports and from a pasted cURL command (--aws-sigv4, --digest), and both work from the command line and for AI agents.

Keep your workspace in a folder you choose. Settings → General → Workspace → Choose Folder… keeps workspace.json in a git repository or a synced folder, so a team can share collections. Only that one file lives there: OAuth tokens, cookies, client certificates, response history and versions stay on your Mac. Everything in the file is shared, variable values included, so keep real secrets out of it. A folder that already has a workspace is opened as it is; otherwise your current one is copied in, and nothing is moved or deleted. Use Default goes back.

Four more themes. Solarized, Dracula, Rosé Pine and Evergreen join Midnight, Retriever, Graphite and Nord in Settings → Appearance, each with a dark and a light variant.

0.17.1· see a report before it leaves your Mac

Review before anything is sent. Report an Issue… now opens a small window first. It says where the report goes, lists the details and, after a crash, the crash report, and lets you read each file and untick it. Nothing is uploaded until you choose Continue in Browser; Cancel sends nothing.

Paths without your account name. In everything a report carries, your home folder is written as ~.

0.17.0· readable pages, in the order you want

HTML responses are indented for reading. An error page, a proxy's complaint or a login page you were redirected to usually arrives as one very long line. It is now laid out and coloured, and a Formatted / Raw switch beside Copy shows the body exactly as it arrived. XML responses get the same switch.

Reorder the sidebar. Drag a request or folder onto a request to put it just before it; a line shows where it will land. Or right-click and choose Move Up or Move Down. Order matters: Run All… and the command line send requests in sidebar order. Each move is one undo step.

For AI agents: resources and prompts. The MCP server now offers each collection as an outline an agent can read in one go: every request with its method, URL, parameter names, body fields and tests. It is an outline, not a copy: no values, bodies, notes or cookies are in it. Three prompts come with it: test an endpoint, debug a failing request, and document a collection.

0.16.3· tips are tagged

Tips sent from the app are now tagged so we can tell them from site tips. Nothing new asks you for anything.

0.16.2· a way to say thanks

Support Retriever. Retriever is free and stays free. If it has saved you time, there is now a way to tip: Support Retriever… in the Retriever menu opens a pay-what-you-want page. Once you have sent a good number of requests, the Welcome screen also shows a small card with the same link; Hide removes it for good. Nothing is locked, and nothing changes if you never pay.

0.16.1· crash reports name the crash

A report after a crash says what failed. When you send a report after Retriever quits unexpectedly, the macOS crash report was always attached, but the report itself only said "Crash log attached". It now names the failure (for example EXC_CRASH (SIGSEGV)), so we can tell crashes apart at a glance. Nothing about what is sent has changed.

0.16.0· find it again, and keep it secret

Search Responses… (⇧⌘F) finds text in every saved response: bodies, headers, the URL that was sent and the request body. Each result shows the request, its status, how long ago it was, and the matching line. Click one and the request opens on that saved response.

Client certificates. For servers that ask who you are with a certificate (mutual TLS), Settings → General → Client certificates takes a .p12 or .pfx file and its passphrase per host. Retriever presents it only to the host it was set up for, and shows whose certificate it is and when it expires.

Secret variables. The lock on a collection or environment variable marks it secret: its value is masked on screen, hidden from AI agents and from retriever-mcp send output, and left out of exported files. Requests still use it. The value itself stays in your workspace file as before.

Export Workspace… in the File menu writes every collection and environment to one file that Import reads back, for moving to another Mac or sharing a setup. And gRPC servers that compress their replies with gzip or deflate now just work.

0.15.0· streams, and running the lot

Server-Sent Events. A streaming response, such as an LLM API with "stream": true, now shows as a list of events that grows while the stream is open. Click an event for its full data, filter the list, or switch to the raw stream. Stop ends the stream and keeps what arrived as the response. Before, a stream sat on "Fetching…" until it timed out.

Run All… Right-click a collection or a folder to send everything in it, in order. Each request shows its status, time and tests as it finishes, with the failed test or the reason it couldn't be sent underneath. Stopping at the first failure is optional, and Send chain now stops on a failed test too.

Tests travel with Postman collections. Exporting writes each test as a Postman test script. Importing reads the common one-line Postman assertions, such as a status check or a value in the body, as tests; scripts with logic in them are left out, because Retriever never runs scripts.

0.14.0· tests, a command line, and pictures

Tests, without scripts. A new Tests tab holds checks that run on every response: the status, a header, a value in the body, or how long it took. Each row shows whether the latest response passed, and the response shows a count such as 3/5 tests. No JavaScript to write.

Run requests from a terminal or CI. retriever-mcp send "DummyJSON/Auth" sends a request, a folder or a whole collection with the same variables, auth, cookies and chaining as the app, prints each result with its tests, and exits with a failure when something failed. --env picks the environment and --var key=value overrides a variable.

Images and PDFs. A response that is an image is shown as one, with its size; a PDF opens in a viewer. Anything else that isn't text gets a short notice and Save, instead of a screen of garbled characters. XML responses and raw JSON are now coloured like the editor.

0.13.1· crash reports that reach us

Report a crash in two clicks. If Retriever quits unexpectedly, the next launch asks once whether you want to send a report. Say yes and the report form opens with the macOS crash report attached, so we can see where it failed. Help → Report an Issue… attaches a recent crash report as well. You can see the file on the form and remove it before sending, and nothing is ever sent on its own. The crash report holds stack traces and file paths, never your requests, responses or tokens.

0.13.0· YAML specs and readable XML

OpenAPI and Swagger in YAML. Paste or open a .yaml spec in Import and it becomes a collection, the same as the JSON version: a folder per tag, a request per operation, servers as the base URL and security schemes as auth. No yq step. Anchors and merge keys are understood, and big specs import without freezing the window. The MCP server can do it too, with the new import_openapi tool.

XML responses are pretty-printed. SOAP, RSS and other XML responses are indented instead of arriving on one line, with attributes, namespaces, comments, CDATA and text left exactly as the server sent them. XML request bodies get the same format button JSON bodies have.

0.12.2· tell us what went wrong

Help → Report an Issue… opens a short form on SnagFrog, so you can tell us what went wrong and get an email when we reply. It's also in Settings → General. The form gets the app version, your macOS version, Mac model, processor type and language, and nothing from your workspace: no collections, requests, responses, environments or tokens, and no screenshot of the window. Attach your own screenshots if they help.

0.12.1· Intel Macs too

Retriever is now a universal app: the same download runs natively on Apple silicon and on Intel Macs with macOS 15 or later, and so does the bundled MCP server. Nothing else changes; if you're on 0.12.0, this arrives as your first automatic update.

0.12.0· updates, built in

Retriever can now update itself. Retriever → Check for Updates… looks for a new version on demand, and once a day it checks on its own. When there is one, you see what changed and install it with one click; Retriever relaunches on the new version with your workspace untouched.

  • Settings → General → Updates turns the daily check off, or lets Retriever download and install updates without asking.
  • Updates are signed, and Retriever refuses any that aren't signed with the same key as the app you have.
  • The check reads one small file from this site. It sends no identifier and nothing about you or your requests.

This is the last version you need to download by hand: from here on, Retriever updates itself.

0.11.1· a new icon

Retriever has a new face: a squished, glowing tennis ball with a small smile, on the same near-black as the Midnight theme. It replaces the blue tile in the Dock, in the toolbar and on the Welcome screen.

0.11.0· Midnight by default

Midnight is now the default theme: a near-black, monochrome stage with hairline borders and one violet accent, calmer to look at through a long day of requests. If you never picked a theme, Retriever opens in Midnight after the update. If you chose one in Settings → Appearance, it stays as it is, and the deep navy Retriever look is one click away, along with Graphite and Nord.

This site is dark to match, with fresh screenshots of every part of the app in Midnight.

0.10.0· themes, and a lot of fixing

Four colour themes, and a long list of fixes from a close audit of every part of the app: imports, sending, OAuth, the MCP server, the AI features and big workspaces.

Themes

Settings → Appearance now has a theme picker. Retriever is the deep navy look you know. Midnight is near-black and monochrome, with hairline borders and one violet accent. Graphite is neutral grey with a warm accent, and Nord is a cool blue-grey. Each has a dark and a light variant, and System / Light / Dark still decides which one you see. Switching restyles every open window at once.

Paste a curl command anywhere

Paste a curl command straight into a request's URL field and Retriever fills in the method, headers, body and auth, as Postman does. Browser "Copy as cURL" output now imports correctly even when the body has quotes, newlines or accents, and flags like -XPUT, -sSL, -G and --data-urlencode do what curl does.

Requests go out exactly as written

  • Query strings in a URL are sent byte for byte, so pre-signed S3 and Azure links keep their signatures, and a + in a query value is no longer read as a space.
  • Postman imports no longer double-encode query values, and a folder's auth now applies to its requests.
  • OpenAPI imports handle relative server URLs, $ref parameters and bodies, +json media types and Swagger 2 bodies.
  • HAR, Insomnia and cURL imports keep a specific Content-Type such as application/merge-patch+json.
  • Generated code sends repeated and empty headers the way Retriever does.

Faster with big workspaces

With thousands of requests, saving is about three times faster, the sidebar, ⌘K and the chain strip no longer redo work on every keystroke, and the background check for changes made by the MCP server costs next to nothing.

Safer by default

  • The optional AI features mask more before anything leaves your Mac: short secret names like X-Auth-Key or pwd, hex API keys, bot and webhook tokens in URL paths, and passwords inside GraphQL queries.
  • The MCP server masks credentials in every tool result unless the agent passes reveal: true, and a streaming response can no longer stall it.
  • OAuth sign-in ignores stray requests to its callback port, works with [::1] redirects, and the app and the MCP server no longer refresh the same token at the same time.
  • Cookies set for a public suffix such as co.uk or github.io are refused.

Fixes

  • ⌘⌫ in a text field edits the text instead of deleting the request.
  • Undo keeps changes the MCP server made in the meantime.
  • Version History's Remove and Revert no longer delete or move requests they shouldn't.
  • Request History keeps every real revision.
  • The JSON editor pairs quotes correctly, and Tab indents a selection.
  • The shortcut recorder captures combinations that menus use, and refuses ones already taken.
  • WebSocket connections close when their request is deleted, and reconnecting no longer shows a false "Closed".
  • Deeply nested JSON and malformed protobuf data can no longer crash the app.

0.9.0· the everyday things

No new protocols this time. This release is the small frictions you hit ten times a day, plus the imports and network settings people moving from Postman and Insomnia asked for.

Tabs

Keep several requests open. ⌘T opens a tab, ⌘W closes one, and ⇧⌘] / ⇧⌘[ move between them. Clicking in the sidebar changes what the current tab shows, the way a browser follows a link. ⌘-click, or Open in New Tab in the right-click menu, opens it beside. The tab bar only appears once there are two tabs, and ⌘W on the last one closes the window as before. Every shortcut can be rebound in Settings.

Find in responses

The JSON tree has a Find field (⌘F). It matches keys and values, shows how many it found, and ↩ / ⇧↩ step through them, unfolding whatever a match is hidden inside. Raw and non-JSON bodies get the standard macOS find bar.

Light mode

Settings → Appearance offers System, Light or Dark. Dark stays the default. Light isn't the dark theme turned inside out: it has its own neutral background, white panels, and deeper colours for methods, statuses and syntax so they stay readable on white.

Keyboard in the sidebar

Click a request, then ↑ ↓ to move, → ← to open and close folders or jump to the parent, and ↩ to rename. ↓ from the filter field jumps into the results.

HAR and Insomnia import

  • HAR: in your browser's dev tools, choose Save all as HAR and drop the file on Import. Requests arrive in a folder per host, with query, headers and body. Images, scripts, stylesheets and fonts are left out.
  • Insomnia (v4 JSON export): workspaces become collections and folders keep their order. The base environment becomes collection variables and sub-environments become environments. {{ _.token }} becomes {{token}}. Bearer, basic and API key auth come across.

Proxies and self-signed certificates

  • Settings → Network sends requests through an HTTP(S) or SOCKS proxy, such as Charles, Proxyman, mitmproxy or a company one, with a list of hosts that go direct.
  • Each request has a Verify TLS switch in its Docs tab. Turn it off for a development server with a self-signed certificate, like curl's -k.

Better cURL import

Pasted commands keep -k, --max-time and -r. Flags that can't live on a request, such as a proxy, client certificates or a body read from a file, are now listed after the import instead of disappearing silently.

Good to know

  • The proxy applies to HTTP and GraphQL requests sent from the app. WebSocket and gRPC connections, and the MCP server, still connect directly.
  • Opening a workspace in 0.8.0 or earlier works, but saving it there turns any Verify TLS switches back on.
  • In full screen, the toolbar no longer leaves a gap where the window buttons would be.

0.8.0· more than HTTP

Four things the FAQ used to list under "What's missing today?". Each was the thing people moving from Paw hit most, and each works the way the rest of Retriever does: local files, variables everywhere, and responses you can chain from.

A cookie jar

Log in once and the session cookie comes along on the next request, as it would in a browser. Cookies a server sets, including on the redirect after a login and on WebSocket handshakes, are kept per domain and path and sent back only where they belong, and only over HTTPS when they're marked Secure. Request → Cookies… (⌥⌘K) shows them by domain; edit, add or delete any of them. A request that should stay cookie-free can switch the jar off in its Docs tab, and a Cookie header you type yourself always wins. The jar lives in cookies.json beside your workspace, readable only by you, and the MCP server uses the same one.

GraphQL, with the schema at hand

GraphQL is now a body type: a query editor that highlights and auto-closes braces, and a separate pane for variables, which can use {{variables}} like anything else. Fetch Schema introspects the API with the request's own headers, auth and cookies. Browse the queries, mutations and types, press Use on a field to get a complete operation with a variable for every argument, or Insert to add a field to what you have. A 200 that still carries errors gets a badge, so it doesn't pass for a success.

WebSockets

Switch a request's method pill to WebSocket, press ⌘↩ to connect, and send text or JSON messages, as many as you like. The response side becomes a conversation: what you sent, what came back, timestamps, a filter, and a ping that times the round trip. Headers, params, auth and cookies all go with the handshake. When the socket closes, the transcript is saved to History, and other requests can chain from it.

gRPC

gRPC requests call a service method over HTTP/2, with TLS or, for a server on your own machine, without. Retriever asks the server for its services through reflection, or reads your .proto files and whatever they import. Pick a service and method, press Template for an example message, and write it as JSON: 64-bit numbers as strings, enums by name, timestamps as dates. Unary and server-streaming calls are in; client streaming takes a JSON array of messages. The status shows by its gRPC name, NOT_FOUND rather than 404, and still counts as its HTTP equivalent, so chains, failure explanations and the OAuth token refresh behave the way they do for HTTP. Copy as cURL gives a grpcurl command instead.

Retriever speaks HTTP/2 itself for this, because the system's networking can't reach a plaintext local gRPC server or read the status gRPC sends after the body. There are still no third-party libraries in the app.

For agents

The MCP server has four new tools: list_cookies, clear_cookies, graphql_schema and grpc_describe. create_request and update_request accept GraphQL variables, WebSocket and gRPC requests, and sending a WebSocket request returns the conversation.

Good to know

  • A workspace with GraphQL, WebSocket or gRPC requests needs 0.8.0 or later. An older version refuses to open it rather than change it.
  • Not yet: Server-Sent Events, GraphQL subscriptions, interactive client and bidirectional gRPC streaming, and compressed gRPC messages.

0.7.0· bring your own model

The optional AI features used to mean one provider. Now they run on whichever key you already have: TypeSafe, Anthropic or OpenAI. Pick one in Settings → AI, paste the key, and the three features work the same way. If you already had a TypeSafe key, nothing changes and nothing needs re-entering.

Pick a provider, and a model

  • TypeSafe, as before, answering with Jev.
  • Anthropic, with a choice of Claude models.
  • OpenAI, with a choice of GPT models.

With Anthropic or OpenAI you also choose the model, because the cost difference across a tier is large and these questions are small. Changing either the key or the model checks it with the provider before Retriever keeps it, so a typo or a model your account can't reach is caught in Settings rather than the first time a feature quietly does nothing.

Still a judgment, not a chat

This is the part that didn't change. Retriever never asks a model to write you a paragraph. Each feature asks one narrow question with a fixed set of answers, and reads back a choice, a probability for every option and a confidence. Your Mac finds the candidates, masks the secrets and decides what to do with the answer; the model only judges. Below a threshold Retriever shows nothing at all, which is why a wrong guess stays out of your way.

Chat models don't answer in that shape on their own, so Retriever asks them for it: one forced tool call against a strict schema that only allows the options on offer. The answer is then checked before it is used. Probabilities that don't add up are normalized, options the model invented are dropped, and when a model's own label disagrees with its own numbers the numbers win, because the numbers are what the thresholds read.

One honest caveat: TypeSafe returns calibrated probabilities and the thresholds were tuned against them. Chat models report their own confidence, and they tend to run high. On Anthropic or OpenAI you may see a suggestion where TypeSafe would have stayed quiet. If that gets annoying, the feature switches are still per-feature.

Your key, your bill

  • Retriever adds no charge of its own and has no key of its own. You are billed by the provider you picked, for questions you triggered.
  • The key stays in typesafe.json beside your workspace, readable only by you, never in workspace.json or exports. The file kept its name so existing installs keep working.
  • Without a key, nothing is sent anywhere, and the rest of the app is untouched.

What gets masked before a question leaves your Mac is unchanged, and spelled out in the privacy notes.

0.6.0· Retriever is free

The license is gone. Retriever is free, in full, for everyone: no key to paste, no account, no trial to run out, and no feature held back for a paid tier. If you already have the app, update and the activation screen simply never appears again.

  • No license key, no activation and no daily check. The app never contacts a license server, because there isn't one.
  • The Settings → License tab is gone, along with the activation screen on first launch. Any license.json left beside your workspace is ignored and can be deleted.
  • The MCP server runs without a key too. Agents that used to be told the app wasn't activated now just work.
  • Everything that was in 0.5.0 is still here: OAuth 2.0, response chaining, the JSON tree, imports, code generation, version history and the optional AI features.

Licensing was the part of this project that felt like running a business rather than making a tool, and it was the part that could lock someone out of their own requests because a check failed on a plane. Removing it was the simpler answer.

If Retriever earns a place in your dock and you want to support it, there is a pay what you want link. Paying nothing is a completely fine answer, and nothing in the app will ever ask you again.

0.5.0· ask why it failed

A 401 tells you that something is wrong with auth. It doesn't tell you whether the token expired, the environment points at the wrong server, or you pasted a token from yesterday. 0.5.0 adds optional AI help for that part of the job. It is off until you turn it on, and it runs on your own API key.

Why a request failed

Click the status of a 4xx or 5xx response. Next to the usual guide, Retriever now shows the likely cause, read from the request you sent and the response you got back, and the fix it can apply for you:

  • Expired or invalid token: Get New Token & Resend for OAuth 2, or Open Auth
  • Wrong environment or host: Switch Environment & Resend
  • Rejected body, or a missing header or parameter: straight to the Body, Headers or Params tab
  • Rate limited: how long the server asked you to wait, and Resend

When it isn't sure, it says so and leaves you with the regular checklist.

Chain suggestions

Paste the token from Login's response into another request's Authorization header, and Retriever notices that it matches Login › body.accessToken. A bar offers to replace it with {{@Login.body.accessToken}}, so the request keeps working after the token changes. The same works for ids in a path, query values and JSON body fields.

Finding the matches happens on your Mac. The AI only decides whether a match is meant or a coincidence, like a 1 that happens to equal someone's user id. One click applies the suggestion, ⌘Z undoes it, and × keeps the value you typed.

⌘K by description

Search with three words or more, like “the one that adds an item to a cart”, and ⌘K adds the requests that match the description above the usual name matches. Short searches work exactly as before.

Your key, your data

The AI features use TypeSafe with your own API key, which you add in Settings → AI. There is no AI bill of mine to pass on to you, which is part of how the app stays free. Each feature has its own switch.

  • Without a key, nothing is sent. Retriever works exactly as it did in 0.4.0.
  • Before a question is sent, Authorization and cookie headers, fields named like token, secret, password or key, and anything that looks like a credential are replaced with «masked». Bodies are cut to a few thousand characters.
  • The key lives in typesafe.json next to your workspace, readable only by you, and never in workspace.json or exports.

The details are in the privacy notes.

Also

  • The MCP server reports version 0.5.0. Its tools haven't changed and it doesn't use the AI features.

These features are brand new. If an explanation is wrong or a suggestion makes no sense, email me the request and response with the secrets taken out, and I'll tune it.

0.4.0· Retriever is paid

Retriever now costs $19, once, as an early adopter price (it goes up to $39 later). You buy it through Polar and paste the license key on first launch. The key is checked once a day when you're online, and Retriever keeps working offline for 30 days after the last check. The MCP server unlocks with the same key.

0.3.0· undo and history

  • ⌘Z and ⇧⌘Z undo and redo deletes, moves, imports and edits, up to 100 steps.
  • File → Version History keeps copies of the whole workspace, taken before every delete, import and restore and while you edit. Restore a single request, folder, collection or environment, or everything.
  • Every request has its own History with earlier revisions and a line-by-line diff.

0.2.0· OAuth 2.0

Authorization code with PKCE, client credentials, device code, password and refresh-token grants. Tokens are fetched when you send, refreshed before they expire and once more on a 401. Presets for GitHub, Google, Microsoft Entra ID, Auth0, Okta and Spotify. Also a new app icon.

0.1.1

New app icon, and ⌘K now always puts the cursor in its search field instead of the sidebar filter.

0.1.0· first release

The first signed and notarized build: requests, collections, environments, response chaining, the JSON tree viewer, code generation, Postman and OpenAPI import, and the MCP server for AI agents.