# Connecting Shager to Claude Desktop: Custom Connector With Request Headers, or the mcp-remote Route

_2026-08-12 · Two working ways to connect Claude Desktop to Shager's API-key MCP server: a custom connector with request headers, or mcp-remote in the desktop config file._

Claude Desktop can use Shager today, but which route works depends on your account. If the Add custom connector dialog shows a Request headers section, add https://app.shager.ai/api/mcp as a custom connector with No sign-in and an `authorization` header of `Bearer shgr_live_...`. If it doesn't, bridge the remote server through `claude_desktop_config.json` with the open source `mcp-remote` package, which forwards the same header.

Both routes end in the same place: Claude in the desktop app can list your client workspaces, draft multi-account posts and pull per-account clicks. The difference is who holds the key and how much setup each teammate repeats.

## Why isn't this a one-click connector?

Shager authenticates MCP clients with an API key in the `Authorization` header. OAuth sign-in for MCP is coming, but it isn't live yet. Most consumer chat apps were built around OAuth connectors, so header auth is where the friction shows up.

Anthropic's documentation for [adding a connector that isn't in the directory](https://claude.com/docs/connectors/custom/add-unlisted) is explicit about this case: "If the server uses an API key, choose No sign-in and add the key under Request headers." The same page also says request header authentication "is in beta and available to a limited set of organizations." So the first route is the right one, but you may not have it yet. That's why the second route exists.

## Route 1: a custom connector with a request header

Use this if you can see Request headers in the dialog. Custom connectors by URL work on Free, Pro, Max, Team and Enterprise plans according to the same page, with Free limited to one custom connector.

On Free, Pro or Max:

1. Open Customize, then Connectors, and click Add custom connector.
2. Name it `Shager` and enter the MCP server URL `https://app.shager.ai/api/mcp`.
3. For Authentication, choose No sign-in.
4. Open Request headers, pick `authorization` from the list, and enter the value `Bearer shgr_live_your_key_here`.
5. Mark the header Required, then click Add.

Step 4 is where most people slip. The docs state that Claude "sends the value exactly as you enter it. It doesn't add an authentication scheme or any other prefix." If you paste only the key, Shager receives `Authorization: shgr_live_...` and returns 401. Include the word `Bearer` and the space.

On Team and Enterprise, an Owner adds the connector under Organization settings, then Connectors, and members connect from their own Customize page. Be careful with that pattern for Shager. A request header is one shared credential for everyone in the org, which the Anthropic page says suits "a service account" rather than per-person sign-in. With one shared Shager key, the audit log at https://app.shager.ai/dashboard/agents attributes every call to that single key. If you need per-person attribution, use Route 2 with individual keys until Shager's OAuth ships.

Also note you can't edit headers later. To rotate the key, remove the connector and add it again.

## Route 2: mcp-remote in claude_desktop_config.json

The desktop config file is for local servers that Claude Desktop launches as processes. Anthropic's help article on [custom connectors](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) describes those local servers as "a separate mechanism" from remote connectors, and a plain `url` entry there isn't how Desktop reaches a remote server.

The workaround is [mcp-remote](https://github.com/geelen/mcp-remote), an open source package that runs locally over stdio and forwards requests to a remote MCP server, with custom headers. It needs Node.js installed.

Open the config through Settings, then Developer, then Edit Config. The [MCP quickstart for local servers](https://modelcontextprotocol.io/docs/develop/connect-local-servers) gives the paths: `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS and `%APPDATA%\Claude\claude_desktop_config.json` on Windows.

```json
{
  "mcpServers": {
    "shager": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://app.shager.ai/api/mcp",
        "--header",
        "Authorization:${SHAGER_AUTH_HEADER}"
      ],
      "env": {
        "SHAGER_AUTH_HEADER": "Bearer shgr_live_your_key_here"
      }
    }
  }
}
```

The odd-looking `Authorization:${SHAGER_AUTH_HEADER}` with no space after the colon is deliberate. The mcp-remote README warns that Claude Desktop on Windows (and some other clients) doesn't escape spaces inside `args`, so the space lives in the environment variable instead. This form works on macOS too, so use it everywhere and stop thinking about it.

If you'd rather not keep the key in the config JSON, mcp-remote also accepts `--header-file` pointing at a file with one `Name: value` per line:

```text
Authorization: Bearer shgr_live_your_key_here
```

Quit Claude Desktop completely and reopen it. The quickstart says the app must restart to load new config. Then open the connectors menu from the chat input and check that `shager` is listed with its tools.

### If it doesn't connect

Logs live in `~/Library/Logs/Claude` on macOS (`%APPDATA%\Claude\logs` on Windows). `mcp.log` covers connection failures, and `mcp-server-shager.log` holds mcp-remote's own output. A 401 in there means the header value is wrong. A `command not found` for npx means Node isn't on the PATH that Claude Desktop sees, which is common when Node was installed through a version manager. Point `command` at the absolute path of `npx` in that case.

## Which route should you pick?

| | Custom connector with request header | mcp-remote in config |
|---|---|---|
| Availability | Beta, limited organizations | Any Claude Desktop install with Node |
| Who holds the key | Stored by Claude, not shown again | Your local config or a header file |
| Works on claude.ai in the browser | Yes, it's an account connector | No, desktop only |
| Per-person keys on Team plans | No, one shared header | Yes, each person configures their own |
| Rotating the key | Remove and re-add the connector | Edit the file, restart |

For a solo consultant, Route 1 is cleaner if you have it. For an agency with five people touching client accounts, Route 2 with individual keys keeps the audit trail honest.

## A first prompt that proves it works

```text
Using Shager: who am I, which workspaces do I have, and for the workspace
"Harbor Fitness" list the connected channels by network and status.
```

Then try a draft:

```text
Create a draft post in "Harbor Fitness" to every active Instagram and Facebook
channel. Caption: announce the new 6am class. Write a different caption per
channel using the location in the channel name. cta_url
https://harborfitness.example/6am, campaign "6am-launch". Don't schedule it.
```

That second prompt uses `create_post` with `per_channel` captions and a tracked `cta_url`, which gives each account its own short link with `utm_content` set to the account. You'll see the draft in Shager, where a human or the client approval link can take it from there. Our piece on [client approval workflows](/en/blog/client-approval-workflow-for-agencies) explains how agencies tend to wire that step.

## Keep the key scoped

Desktop chat is where people experiment, so give this key `read` and `write` only. Without `publish`, Shager refuses `schedule_post` and any `create_post` that includes `schedule_at`, no matter what is typed in chat. Create a separate key with `publish` for the scripted routine that actually ships posts, at https://app.shager.ai/dashboard/agents.

## FAQ

### Can I just paste a url entry into claude_desktop_config.json?

That file launches local servers as processes, and Anthropic documents remote servers as a separate mechanism through connectors. Use mcp-remote as the local process that forwards to the remote URL, or use a custom connector if your account has request headers.

### Will this get simpler?

Yes. OAuth sign-in for Shager's MCP server is coming. Once it ships, adding https://app.shager.ai/api/mcp as a custom connector with a normal sign-in will be the simplest path on every plan, each person will connect with their own account, and the header workarounds become optional.

### Does the same setup work for Claude Code?

Claude Code supports header auth natively with `claude mcp add --transport http` and `--header`, so it needs neither workaround. The steps are in [connecting Shager to Claude Code](/en/blog/connect-shager-to-claude-code).

## Next step

Once Desktop can call Shager, the useful habit is to stop typing long prompts and package them as a skill. If you're on the API rather than a chat app, start with the [REST API quickstart](/en/blog/shager-rest-api-quickstart) and the [OpenAPI document](https://app.shager.ai/api/v1/openapi.json), which describe the exact same operations the connector exposes.

---
Source: https://shager.ai/en/blog/connect-shager-to-claude-desktop
