[BUG] Plugin userConfig values not prompted on enable

Open 💬 24 comments Opened Mar 26, 2026 by florislw

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

When a plugin defines userConfig in plugin.json, Claude Code does not prompt the user for those values when the plugin is enabled. The plugin installs and shows as "Enabled" but immediately errors.

The only way to set the value is to manually select "Configure options" from the plugin menu afterward.

What Should Happen?

The user should be prompted for userConfig values when the plugin is enabled, as described in the documentation.

Error Messages/Logs

Missing required user configuration value: <key>. This should have been validated before variable substitution.

Steps to Reproduce

  1. Create a plugin with a userConfig entry in plugin.json:
"userConfig": {
  "api_token": {
    "title": "API Token",
    "description": "Authentication token",
    "sensitive": true,
    "type": "string"
  }
}
  1. Add a marketplace via /plugin marketplace add <url>
  2. Install the plugin via /plugin install <name>@<marketplace>
  3. Plugin enables — no prompt appears for api_token

Claude Model

Sonnet (default)

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.84

Platform

AWS Bedrock

Operating System

macOS

Terminal/Shell

IntelliJ IDEA terminal

Additional Information

Side note, may be related: the userConfig schema in the documentation appears incomplete. The docs only list description and sensitive as valid fields, but removing title or type from a userConfig entry causes a schema validation error on install. This suggests the actual required schema differs from what is documented.

View original on GitHub ↗

24 Comments

bruno-oliveira · 3 months ago

Second this! It would be nice to have the checks in place so that skill use works as intended!

bmihaila-bd · 3 months ago

Ran into same issue today and wasted lots of time to debug what goes wrong. Seems it is just a bug in Claude. As stated above, the user docu https://code.claude.com/docs/en/plugins-reference#user-configuration is wrong and misses some fields from the example. A plugin.json will not validate if having those examples pasted in.

Using Claude Code  v2.1.81

tommy-gun · 3 months ago

I have a similar problem on Windows. Moreover, it is not possible to set these properties on Claude code desktop UI, and some missing information on the online documentation as mention user above.

#39827

bmihaila-bd · 3 months ago

According to the changelog and news this feature should has been added "externally" - whatever that means:

     Version 2.1.83:
     • Added CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1 to strip Anthropic and cloud provider credentials from subprocess environments (Bash tool,
     hooks, MCP stdio servers)
     • Plugin options (manifest.userConfig) now available externally — plugins can prompt for configuration at enable time, with sensitive:
     true values stored in keychain (macOS) or protected credentials file (other platforms)

I liked what Claude itself had to say when debugging the issue last week :D :

1. MCP fails because ${user_config.api_endpoint} and ${user_config.api_token} in .mcp.json are not being substituted — the
  server starts with empty/literal env vars and crashes.
  2. No credential prompt because userConfig in plugin.json is likely not a supported Claude Code plugin feature yet. It appears to be a planned/aspirational field that Claude Code doesn't actually process.

"aspirational" feature indeed, haha.

Inpacchi · 3 months ago

+1

AlexanderThiele · 3 months ago

@florislw i tried to set the value manually after i installed the plugin but the customize button is still greyed out inside the claude desktop mac app.

you wrote:

The only way to set the value is to manually select "Configure options" from the plugin menu afterward.

can you maybe explain how you did it?

freiit · 3 months ago

also not working for linux, vanilla claude code.

florislw · 3 months ago
@florislw i tried to set the value manually after i installed the plugin but the customize button is still greyed out inside the claude desktop mac app. you wrote: > The only way to set the value is to manually select "Configure options" from the plugin menu afterward. can you maybe explain how you did it?

@AlexanderThiele my bug report is for Claude Code, not the desktop app, so I'm not sure why it is different for you.

CNelsonConsulting · 3 months ago

+1 Claude Cowork desktop does not prompt the user as specified for the userconfig values needed for a plugin.

AlexanderThiele · 3 months ago
> @florislw i tried to set the value manually after i installed the plugin but the customize button is still greyed out inside the claude desktop mac app. > you wrote: > > The only way to set the value is to manually select "Configure options" from the plugin menu afterward. > > > can you maybe explain how you did it? @AlexanderThiele my bug report is for Claude Code, not the desktop app, so I'm not sure why it is different for you.

Ah yes sorry, we want to distribute plugins in our org and we want to mainly use the Claude Desktop app with cowork. Also all non tech-focused people should also work with that.

Claude sent me this link and i did not check the repo of this issue. Let me check if i can find a claude desktop issue board.

ozonni · 3 months ago

+1 on this, doesn't work in Claude Desktop. It's stops us from adopting plugins. Any update on this?

DickSwart · 3 months ago

+1 on claude code cli, in my case using: "sensitive": true,

ozonni · 3 months ago
+1 on claude code cli, in my case using: "sensitive": true,

does it mean that with "sensitive": false, it works and you actually get asked to enter values?

samtimmermansae · 3 months ago

+1 for Claude Code CLI, desktop app and Claude Cowork not prompting to fill in fields defined in userConfig

oliverkaiser · 3 months ago

+1, very annoying as its blocking us in further adoption.

norrietaylor · 2 months ago

Adding a downstream symptom here for search discoverability: when a plugin declares a \mcpServers.*.url\ using \\${user_config.<key>}\ interpolation, the MCP server fails to load on fresh install with:

\\\
Plugin MCP server error - generic-error: Plugin option \"<key>\" isn't set.
\
\\

The prompt never fires even without a \default\ declared in the manifest, so the interpolation resolves against an empty value. Manifest-declared \default\ is also not used as a fallback (tracked separately in #46477).

Cross-ref: distillery PR norrietaylor/distillery#331 (workaround: hardcode URL + document user-scope override via \claude mcp add\).

owtaylor · 2 months ago

One hint here is that if you want the config UI to show up, you need to have "required": true for a userConfig option - if options aren't required, then a blank value is considered fine.

Even knowing that there are still some issues:

  • The configuration UI will only show up for /plugin install ... within Claude Code and not when running claude plugin install from the CLI.
  • The behavior after claude plugin install when required parameters are missing isn't great - in my observation an MCP server that uses ${user_config.OPTION} for an envvar will silently not load.
freiit · 2 months ago

I tested @owtaylor remark. seems it works, but only for secrets, not for normal variables. But the value seems not to be stored, i can still see the values i set earlier. (Another issue: config in user seems to overwrite config in project - unconfirmed, would need to test more... (I don't even know what i would like to expect - user installation, user config or project config?))

The issue is still: the variable itself is not visible in any tool/mcp service:

Bash(env | grep -iE 'plugin|userconfig|probe|secret' | grep -v -E '^(PATH|_=)' || echo "(no matches)")                                                                                            
  ⎿  (no matches)                                                                     
owtaylor · 2 months ago
I tested @owtaylor remark. seems it works, but only for secrets, not for normal variables. But the value seems not to be stored, i can still see the values i set earlier. (Another issue: config in user seems to overwrite config in project - unconfirmed, would need to test more... (I don't even know what i would like to expect - user installation, user config or project config?))

It worked for me for me for normal variables. I haven't experimented "sensitive": true.

One thing that was causing problems for me earlier is that my plugin had a different name in the manifest then it had in my (local) marketplace. And then Claude Code would sometimes write settings to the manifest name and then read from the marketplace name. Make sure these match.

I think plugin user config is always written to and read from user settings. Which is a bit odd since plugins can be installed with a project or local scope.

jkolk-canva · 2 months ago

+1, not working for me in Claude Code Desktop, Claude Cowork, nor Claude Code CLI.

florislw · 2 months ago
One hint here is that if you want the config UI to show up, you need to have "required": true for a userConfig option - if options aren't required, then a blank value is considered fine. Even knowing that there are still some issues: The configuration UI will only show up for /plugin install ... within Claude Code and not when running claude plugin install from the CLI. The behavior after claude plugin install when required parameters are missing isn't great - in my observation an MCP server that uses ${user_config.OPTION} for an envvar will silently not load.

Marking as required solved this for me! I guess it makes sense that it will not prompt if the option is not required...

jgnewman · 2 months ago

I'm on version 1.7196.0 (2dbd78) of Clause Desktop for Mac and setting required to true did not fix this for me :/

seanlynch-fivetran · 1 month ago

Seems to be working smoothly in the CLI now for new plugin installs (2.1.143). Not working on Claude for Mac desktop app (Claude 1.7196.3 (ca0c62))

ozonni · 1 month ago

crazy that after 2 month this bug is still not fixed. @bcherny can you help here? this is really blocking to use plugins that require user configuration