Repository navigation
@genclass/mcp: the plugin's repository vendors the released server; the lockfile is gone - #127
Merged
Merged
Conversation
…tion (listings/mcp.md section 3) What the portal said on 2026-10-28: the first validation at e911b25 (7 passed, 4 warnings, 2 holds), the listing and data-handling answers, the push webhook, the scan and review state; then the lockfile commit 68507fa, found by the scheduled check, validated with "Launcher locked" and held on a second reason, "Dependencies install from a lockfile", which a reviewer clears. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…he lockfile is gone
scripts/plugin-repo.mjs fetches @genclass/mcp at package.json's version from npm (npm install --ignore-scripts
into a temporary prefix; --server <package dir> takes a local build) and writes it as server/cli.mjs with the
package's bin next to it; the assembled .mcp.json and hook run node ${CLAUDE_PLUGIN_ROOT}/server/genclass-mcp.mjs.
plugin/package.json and plugin/package-lock.json are removed: Anthropic's directory held the lockfile install for
review next to the npx launcher hold, and its hold text names built files inside the plugin, run from the plugin
root with no lockfile, as the way out. The plugin folder in GenClass-lib and the Agent Plugins mcp.json keep npx
(nothing built is committed here; that format has no plugin-root variable). The sync workflow treats the script's
exit code 3 (the version is not on npm yet) as nothing to do. manifests.test.ts checks the assembled tree against
the plugin folder, the vendored server byte for byte, the absence of package.json, lockfile and node_modules, and
runs the vendored server.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Anthropic's directory holds the plugin for a reviewer on two grounds: the
npxlauncher ("Runs a pinned npx or uvx package") and, since the lockfile landed (68507fa), "Dependencies install from a lockfile". Its hold text names the way out: the package's built files inside the plugin, each under 256 KiB, run from${CLAUDE_PLUGIN_ROOT}, with nopackage.jsonor lockfile. This makesgenclass-dev/genclass-pluginexactly that.What changes
packages/mcp/scripts/plugin-repo.mjsfetches the released@genclass/mcpatpackage.json's version from npm (npm install --ignore-scriptsinto a temporary prefix, so the registry's integrity check applies;--server <package dir>takes a local build instead) and writesserver/cli.mjs(the package'sdist/cli.js, byte for byte) andserver/genclass-mcp.mjs(itsbin/genclass-mcp.mjsimporting that file). In the assembled repository.mcp.jsonrunsnode ${CLAUDE_PLUGIN_ROOT}/server/genclass-mcp.mjsand the hooknode "${CLAUDE_PLUGIN_ROOT}/server/genclass-mcp.mjs" hook; nothing else in those two files changes, and every other file stays byte-identical topackages/mcp/plugin/.plugin/package.jsonandplugin/package-lock.jsonare removed, with their pins intest/manifests.test.ts.npxlaunchers (nothing built is committed here; the marketplace in GenClass-lib still lists it). The Agent Pluginsmcp.jsonkeepsnpxeverywhere: that format has no plugin-root variable (Codex's docs give${PLUGIN_ROOT}for hooks only, and setCLAUDE_PLUGIN_ROOTas an environment variable for compatibility), and Codex and Cursor read it.sync.ymltreats that as nothing to do, so the repository stays at the previous release until the first sync after the publish.test/manifests.test.ts: the assembled tree is the plugin folder byte for byte except the two launchers; the launchers are exactly the vendored form; the server is byte-identical to the source package;--versionprintspackage.json's version; nopackage.json, lockfile ornode_modules, every file under 256 KiB; themcp.jsonlauncher is still the pinnednpxone; the workflow carries the exit-3 handling; and the default fetch path works against npm (lenient when npm is unreachable or the version is unpublished).CHANGELOG.md(the unreleased lockfile entry becomes this one),docs/adoption/listings/mcp.mdsection 3, one phrase inAGENTS.md.Checked locally (Node 22, Claude Code 2.1.311):
npm run typecheck -w @genclass/mcp,npm run build -w @genclass/mcp,npx vitest runinpackages/mcp(153 tests),claude plugin validate --profile directoryon the assembled folder and onpackages/mcp/plugin(nothing to report), the vendored server answering--versionand an MCPinitializeover stdio from the assembled folder, the hook exiting 0 silently without a bridge, and the unpublished path (ETARGET→ exit 3).Not checked here: the directory's reading of the vendored version, which needs the sync to push it, and the Chromium e2e (CI's job runs it).
After the merge: the plugin repository's
.github/workflows/sync.ymlis excluded from the sync (the default token cannot change workflow files), so the new workflow text is pushed there by a person once, then the sync is run.Stacked on #126 (the listings record), so its commit shows here until that one merges.
🤖 Generated with Claude Code