Use a third-party provider in Claude Desktop
Claude Desktop can send its requests to a gateway that speaks the Anthropic Messages API, configured from a library of saved configs. yoink drops one file per provider into that library, Claude-3p/configLibrary/yoink-<provider>.json, and stops there: you select it in the app. Run yoink connect <name> --to claude-desktop, then finish in Developer, Configure third-party inference.
On this page
At a glance
| Fact | Value |
|---|---|
| Harness id | claude-desktop |
| Config yoink writes | Claude-3p/configLibrary/yoink-<provider>.json |
| Format | JSON |
| Protocols, in order of preference | anthropic-messages |
| Default model | first entry of inferenceModels |
| Path override | none |
| Providers at once | many, side by side |
| Experimental | yes |
| Presets that reach it | 5 of 7: kimi-code, moonshot, openrouter, deepseek, zai |
| Connect command | yoink connect <name> --to claude-desktop |
Generated from the yoink CLI source and docs/harnesses.md.
What yoink writes
For the OpenRouter preset with --default z-ai/glm-4.7, the file holds four keys, key redacted:
{
"inferenceProvider": "gateway",
"inferenceGatewayBaseUrl": "https://openrouter.ai/api",
"inferenceGatewayApiKey": "<your key>",
"inferenceModels": ["z-ai/glm-4.7"]
}inferenceProvideris alwaysgateway, the mode Anthropic's gateway guide describes for self-hosted or third-party endpoints.inferenceGatewayBaseUrlis the provider's Anthropic endpoint with any trailing/v1removed.inferenceModelslists every model you selected in yoink, as plain ids, with the--defaultmodel moved to the front. The first entry is what yoink reports as the default.
Because the list holds full model ids, the app has an explicit model list and does not depend on the gateway's GET /v1/models to fill its picker; Anthropic's guide notes that when every entry is a full id, the app skips that call.
Finish in the app
yoink never writes the library's _meta.json and never touches managed-preference files, so Claude Desktop does not switch configs on its own. After connecting:
- Open Claude Desktop.
- Go to Developer, then Configure third-party inference.
- Select the
yoink-<provider>config. - Relaunch Claude Desktop.
yoink prints these steps as a notice after every connect. Claude Desktop is one of the three harnesses yoink tags experimental, with Goose and Zed, so read that notice each time.
Which providers work
Claude Desktop takes Anthropic Messages only. That rules some presets out:
| Preset | Result |
|---|---|
openrouter, kimi-code, moonshot, deepseek, zai | connect through their Anthropic endpoint |
openai, ollama | refused: neither preset has an Anthropic endpoint, so yoink reports "has no endpoint Claude Desktop can use" |
A custom gateway qualifies when its /v1/messages probe answered.
yoink connect openrouter --to claude-desktop --default z-ai/glm-4.7
yoink connect deepseek --to claude-desktopNot exclusive, unlike Claude Code
Claude Code holds one backend at a time, so connecting a provider there switches your active profile (see Claude Code is exclusive). Claude Desktop does not work that way. Each provider gets its own yoink-<provider>.json, several can sit in the library together, and connecting one never removes another. Which one is live is the choice you make in the app.
Where the library lives
| System | Folder |
|---|---|
| macOS | ~/Library/Application Support/Claude-3p/configLibrary |
| Windows | %LOCALAPPDATA%\Claude-3p\configLibrary |
| Linux | ~/.config/Claude-3p/configLibrary, or under $XDG_CONFIG_HOME |
yoink counts the app as installed when /Applications/Claude.app or the Claude-3p folder exists.
Owned files, no backup
The library files are yoink's own. Each connect overwrites yoink-<provider>.json without a backup, keeping any extra keys you added by hand; yoink disconnect deepseek --from claude-desktop deletes the file. Do not store a config of your own under a yoink- name.
FAQ
I connected a provider but Claude Desktop still uses the old one. Why?
yoink only adds the config to the library. Select yoink-<provider> under Developer, Configure third-party inference, then relaunch the app.
Can yoink import a gateway I already set up in Claude Desktop?
Yes, when it is a library file with inferenceProvider set to gateway (or unset), a base URL and a literal inferenceGatewayApiKey. The provider id is taken from the file name, minus any yoink- prefix.
Related
- Providers
Add an API key once with yoink, from a preset (OpenAI, Kimi, OpenRouter, DeepSeek, z.ai, Ollama) or any compatible URL it probes, and pick its models.
- Harnesses
What yoink writes into pi, omp, opencode, codex, Claude Code, Qwen Code, Kilo, Droid, Crush, Continue, Goose, Zed and Claude Desktop: paths and keys.
- Use OpenRouter in your coding agents
Add your OpenRouter key once and yoink writes it into Claude Code, opencode, pi, Qwen Code, Crush and 7 more. Codex is not supported: no Responses endpoint.
- Use any provider in pi
Connect any OpenAI- or Anthropic-compatible provider to pi. yoink writes ~/.pi/agent/models.json with model limits from models.dev and sets the default.
- Use any provider in omp
Connect a provider to omp. yoink writes ~/.omp/agent/models.yml (or models.yaml), carries over a legacy models.json and sets modelRoles.default in config.yml.
- Use any provider in opencode
Connect OpenRouter, DeepSeek, Ollama or any compatible API to opencode. yoink edits opencode.json or .jsonc in place, keeping your comments and formatting.