CLAUDE LABJP
2.1.273 — A round of connection work landed together: five opt-in headers for LLM gateways, and a notice when Claude Code stops trying to reconnect an MCP server09/29 — The date beside claude-sonnet-4-5 is 12 days out, but it is an earliest-possible estimate. The model is still Active, and public retirements get at least 60 days noticeMCP — People keep asking to reconnect a dropped server without ending the session. The disconnect is now announced, but reattaching is still something you do by handNEW — A scheduled task ran some days and not others. The cause was that only one folder had been bound to itWINDOWS — When Cowork fails on its very first task, check developer mode and the setup state before going looking for a causeHANDOFF — Before a long draft gets too heavy for one chat, decide on the three things the summary must carry into the next one2.1.273 — A round of connection work landed together: five opt-in headers for LLM gateways, and a notice when Claude Code stops trying to reconnect an MCP server09/29 — The date beside claude-sonnet-4-5 is 12 days out, but it is an earliest-possible estimate. The model is still Active, and public retirements get at least 60 days noticeMCP — People keep asking to reconnect a dropped server without ending the session. The disconnect is now announced, but reattaching is still something you do by handNEW — A scheduled task ran some days and not others. The cause was that only one folder had been bound to itWINDOWS — When Cowork fails on its very first task, check developer mode and the setup state before going looking for a causeHANDOFF — Before a long draft gets too heavy for one chat, decide on the three things the summary must carry into the next one
Articles/Claude Code
Claude Code/2026-08-22Intermediate

Switching to headersHelper in Claude Code broke auth for project-scoped catalogs only

Moving a private plugin catalog to headersHelper worked at user scope and failed under the project directory. The cause was credential non-inheritance. Here are two working helpers, measured execution costs, and what unattended runs need.

Claude Code253Plugins3Marketplace2Authentication4Indie Development11

Premium Article

Three mornings that week opened with the same failure notification from an unattended run. Each one traced back to an expired token for the private repository that hosts my own plugin catalog.

As an indie developer I keep one shared set of skills and plugins across both the app side and the site side of my work, stored in a private repository and pulled from several machines and projects. The token lived directly in a config file. Every rotation meant remembering where it was, editing it, and discovering the file I forgot the morning an unattended run fell over.

Claude Code v2.1.238, released on August 20, added headersHelper to plugin marketplaces, which lets that arrangement go away. A command runs every time the catalog is fetched and returns HTTP headers, so you can hand over a freshly minted, short-lived token instead of a long-lived one.

The migration should have taken half an hour. Instead, a helper that worked perfectly at user scope stopped authenticating the moment it moved under a project directory, and I burned half a day there. The reason makes complete sense in hindsight. I did not see it coming.

What was actually painful about the token in a config file

With a catalog in a private repository, authentication is needed twice: once to fetch the catalog JSON, and again to fetch the archives it points at. Both used a fixed token.

The annoying part of a fixed token is not the expiry itself. It is that the only channel telling you it expired is an incident. A long-lived token gives no warning at all, and then several machines and several projects fail to fetch at the same moment.

There is also the file. Putting a token in a config file that lives in a repository turns that file into something you can leak. Even at the scale a single indie developer works at, forgetting to keep a project-level .mcp.json out of git is a real possibility.

headersHelper addresses both structurally rather than procedurally.

Where headersHelper actually plugs in

You can attach headersHelper to a URL marketplace definition and to individual catalog entries. The command you name prints a JSON object of headers to stdout, and those headers ride along with the request.

PlacementWhen it runsTypical use
URL marketplaceEvery catalog fetch, plus same-origin archive fetchesProtecting the catalog as a whole
Catalog entryOnly when that plugin is installed or updatedSplitting distribution per entry

The important detail is that an entry-level helper does not run silently. claude plugin install and claude plugin update display the command and ask [y/N]. You can skip the prompt with -y, but skipping is a decision a human makes once.

If you run anything unattended, check this first. Without an explicit -y, a non-interactive path sits waiting for confirmation. I missed this initially and only noticed when the task hit its timeout.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
You will know exactly which scope to place a headersHelper in when you move a private plugin catalog to short-lived tokens
You will catch the class of helper that works on your machine and dies once distributed, before you ship it to anyone
You will be able to choose between a static store read and per-request RS256 minting from measured cost (5 ms vs 21 ms) instead of guesswork
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $15 for lifetime access
View Membership →

Related Articles

Claude Code2026-09-10
One plugin.json turns a shelf of skills into something you can switch off as a group
When I sorted my skills by what work they belong to, the set I open almost daily turned out to be 5 percent of the total. Here is how I dropped a .claude-plugin/plugin.json into each group so I could switch a whole shelf off, plus the two loading rules I tripped over on the way.
Claude Code2026-06-27
When an OAuth Token Expires, Your Unattended Run Has Nowhere to Go — A Token-Lifecycle Design That Keeps Remote MCP Alive
Remote MCP connectors are authorized via OAuth, but access tokens are short-lived. Interactive sessions can re-authorize in a browser; an unattended scheduled run has nobody to click the dialog. Here is a token-lifecycle design that owns expiry and refreshes ahead of time.
Claude Code2026-06-14
Finding and Installing Claude Code Plugins from a Marketplace — Read What's Inside Before You Trust It
A practical walkthrough for discovering and installing Claude Code plugins from a marketplace. Beyond the /plugin commands, it covers how to read the bundled contents before you install, and how to choose between User and Project scope.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links