A marketplace or plugin entry can declare headersHelper, a shell command whose JSON stdout becomes the HTTP headers used to fetch that marketplace or plugin archive, so short-lived tokens replace static headers. It runs only on explicit install, update or refresh, after you have seen the exact command, and is controlled by the kill switch tengu_plugin_command_source_refresh, which defaults to on. Managed settings disableCommandPluginSources and allowManagedHooksOnly block it entirely.
- The command's output overrides static
headers, is inherited by same-origin archive downloads from that marketplace, is memoised with an expiry, and is re-run on later refreshes. - It runs from the Claude config home rather than the session working directory, and receives
CLAUDE_CODE_MARKETPLACE_URL/CLAUDE_CODE_MARKETPLACE_NAMEfor marketplaces,CLAUDE_CODE_PLUGIN_NAME/CLAUDE_CODE_PLUGIN_ARCHIVE_URLfor plugin archives. - Consent is enforced by comparison: if the command, or the archive URL it fetches, changed since it was displayed, the install refuses and reports
entry_helper_unshown,entry_helper_changedorentry_archive_url_changed. - An entry declaring a helper must be
strict:falseso its full manifest is inlined and reviewable before anything runs. - Sources that are not operator-authored have credential environment variables stripped, their values redacted out of whatever env is passed, and routing/identity headers (
host,cookie,x-forwarded-,proxy-, and similar) dropped from the result. - Marketplaces added via
--add-dirhave their declared helpers stripped; remote managed-settings declarations require separate verification. - Values must be printable ASCII and short enough for the install consent pane to display. Outcomes report to
plugin_headers_helper; when the kill switch is off the log reads "headersHelper not run — disabled by the plugin command kill switch".
CLAUDE_CODE_PLUGIN_ARCHIVE_URL, Command that prints a JSON object of HTTP headers, headersHelper not run \u2014 disabled by the plugin command kill switch
Strings lifted out of the shipped bundle, so the claim above can be checked against them.
tengu_plugin_command_source_refresh Not enough to sayNothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.
This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.238: on
Read once, for one account on one subscription tier, against v2.1.238. It isn't a statement about your account. What a flag value here can and cannot tell you
The entry above is what we published on the day. These lines were added later, as Anthropic's own pages caught up, and they sit beside the original rather than replacing it.
Claude Code [managed settings](/docs/third-party/claude-desktop/code#interaction-with-claude-code%E2%80%99s-own-managed-settings) deployed on the device govern these hooks as they do in the Claude Code CLI: `disableAllHooks` turns them off…third-party/claude-desktop/extensions see the edit
| `.mcp.json` | MCP servers bundled with this plugin. A JSON object keyed by server name: `{"mcpServers": {"<name>": {"type": "http", "url": "...", "oauth": true}}}`. A remote entry uses `type` (`http` or `sse`), not `transport`, and suppo…third-party/claude-desktop/extensions see the edit
Anthropic's documentation has since written up headersHelper, on MCP, plugins, skills, and hooks.
Plugin marketplaces: headersHelper on a url marketplace or a catalog entry runs a command that mints HTTP headers (e.g. a short-lived token)…