Skip to content

fix(onboarding): address Claude Code MCP onboarding friction (#2934) - #2935

Merged
HongmingWang-Rabbit merged 1 commit into
stagingfrom
fix/onboarding-friction-2934
May 5, 2026
Merged

fix(onboarding): address Claude Code MCP onboarding friction (#2934)#2935
HongmingWang-Rabbit merged 1 commit into
stagingfrom
fix/onboarding-friction-2934

Conversation

@HongmingWang-Rabbit

Copy link
Copy Markdown
Contributor

Closes #2934 (partial — items #1, #3, #4, #8). Items #5 (marketplace repo) and #6 (molecule-mcp doctor) are larger efforts deferred to follow-up issues; item #7 (--dangerously flag rename) is not in our control.

What Ryan reported

A stock external-runtime install on macOS Python 3.9 took ~45 min to debug. Concrete pain points:

  • pip's "Could not find a version that satisfies the requirement" reads as "package missing" not "your Python is too old"
  • molecule-mcp not on PATH after user-site pip install
  • Tokens leak into ~/.zsh_history and ~/.claude.json plaintext
  • Push delivery silently gated by 3 conditions, only one documented
  • serverInfo.name reports a2a-delegation while users register the server as molecule

What this PR does

Issue Fix
#1 Python floor README in the publish bundle now leads with "Requires Python ≥3.11", explains the cryptic pip error, recommends pipx install over pip install
#3 Tokens in shell history New MOLECULE_WORKSPACE_TOKEN_FILE env var lets operators point at a 0600 file. Resolution order: inline env > file > ${CONFIGS_DIR}/.auth_token. 6 new tests.
#4 Push delivery gating README now documents all 3 conditions (experimental capability ✓ / marketplace plugin ✗ / dev-channels flag ✗), the symptom of any failing, and that the official marketplace is a known follow-up
#8 serverInfo.name Changed a2a-delegationmolecule to match how operators register it

Files

  • scripts/build_runtime_package.py — README template (the README that ships in the wheel + mirror repo + PyPI page)
  • workspace/mcp_workspace_resolver.py_read_token_from_file_env() + updated help text + docstring
  • workspace/a2a_mcp_server.pyserverInfo.name
  • workspace/tests/test_mcp_cli_split.pyTestTokenFileEnv class with 6 cases

What this doesn't fix (deferred)

Test plan

  • 164/164 test_mcp_cli*.py + test_a2a_mcp_server.py pass locally with WORKSPACE_ID=… set
  • 6 new TestTokenFileEnv cases pin every leg of the new resolver path
  • Wheel build smoke (scripts/build_runtime_package.py --version 0.99.99-dev …) succeeds and the built README contains all expected markers
  • CI green on this PR

🤖 Generated with Claude Code

Ryan's bug report (#2934) walked through ~45 min of debugging a stock
external-runtime install. This PR fixes the four items he flagged that
have a small surface, and stubs out the larger ones for follow-up.

Fixed in this PR
================

#1 — Python floor disclosure (README in publish bundle)
  Add an explicit "Requires Python ≥3.11" section that calls out the
  cryptic "Could not find a version that satisfies the requirement"
  failure mode; recommend `pipx install` over `pip install` so the
  binary lands on PATH automatically; show the explicit `pip install
  --user` alternative with the PATH caveat.

#3 — MOLECULE_WORKSPACE_TOKEN_FILE support (mcp_workspace_resolver.py)
  Add a third resolution step between the inline env var and the
  in-container CONFIGS_DIR fallback. Operators can write the bearer to
  a 0600 file (e.g. ~/.config/molecule/token) and point
  MOLECULE_WORKSPACE_TOKEN_FILE at it, keeping the secret out of
  ~/.zsh_history and out of plaintext in MCP-host configs like
  ~/.claude.json. Inline TOKEN still wins on conflict so rotation flows
  are predictable. README documents the safer option as the
  recommended path. 6 new tests pin every leg (file resolves, inline
  wins, missing/empty file falls through, blank env unset-equivalent,
  help text advertises it).

#4 — Push delivery 3-condition gating (README in publish bundle)
  Document that real-time push on Claude Code requires (a) the server
  to declare experimental.claude/channel (we do), (b) the server to be
  marketplace-plugin-sourced (operators must scaffold their own until
  the official marketplace lands — see #2934 follow-up), and (c) the
  --dangerously-load-development-channels flag on the claude
  invocation. Until any of the three is in place, delivery silently
  falls back to poll mode with no diagnostic. The README now says all
  of this explicitly so a new operator doesn't grep the binary for
  channel_enable to figure it out.

#8 — serverInfo.name mismatch (a2a_mcp_server.py)
  The server reported `serverInfo.name = "a2a-delegation"` while
  operators register it as `molecule` (the name in `claude mcp add
  molecule …`). Harmless on tool routing today but matters for any
  future Claude Code allowlist that gates push by hardcoded server
  name. Renamed to "molecule" with an inline comment explaining the
  invariant.

Deferred (separate issues to track)
===================================

#2 — covered transitively by #1's pipx recommendation; no separate fix.
#5 — `moleculesai/claude-code-plugin` marketplace repo (substantial new
     repo work; the README references it as a documented follow-up).
#6 — `molecule-mcp doctor` subcommand (substantial new CLI surface;
     mentioned in the README's push-vs-poll section as the planned
     diagnostic for silent push fallback).
#7 — `--dangerously-load-development-channels` rename — not in our
     control; that's Claude Code's flag.

Tests
=====
164/164 mcp_cli + a2a_mcp_server tests pass locally
(WORKSPACE_ID=00000000-0000-0000-0000-000000000001 pytest …) including
6 new TestTokenFileEnv cases. Wheel builds successfully via
scripts/build_runtime_package.py with the new README markers verified
in the output.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@HongmingWang-Rabbit
HongmingWang-Rabbit added this pull request to the merge queue May 5, 2026
Merged via the queue into staging with commit 1ad107c May 5, 2026
23 checks passed
@HongmingWang-Rabbit
HongmingWang-Rabbit deleted the fix/onboarding-friction-2934 branch May 5, 2026 21:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Claude Code onboarding friction

1 participant