Repository navigation
Description
Summary
Claude Desktop has a managed policy that requires a signature on desktop extensions: isDesktopExtensionSignatureRequired, which is extensions.signatureRequired internally. Claude Desktop checks that signature with the same verifyMcpbFile as this repo, and that function never returns signed (#260, #276, #277). So with the policy on, Claude Desktop presumably refuses every local extension, signed ones included. An organization that turns the policy on to allow only signed extensions ends up with no local extensions at all, and no publisher can do anything about it.
I have not seen this reported as its own issue; #260 covers the CLI. This issue is about what the bug means for organizations.
What the shipped app does
From Claude.app/Contents/Resources/app.asar on macOS, Claude Desktop 4.4212.0. Excerpts are minified:
-
Install refuses anything that is not
signedwhile the policy is on:let y=t.Jat().extensions.signatureRequired;if(y&&h.status!=="signed")throw Error(...)
The extraction path does the same:
if(e.requireSigned&&t.status!=="signed")throw ... Error("Extension archive is not signed and a valid signature is required"). The update cache does too:Refusing to cache unsigned update for .... -
The policy is exposed as a managed setting:
signatureRequired:...{flatKey:"isDesktopExtensionSignatureRequired",support:{enabled:{scopes:["3p","1p"], ...
-
statuscomes fromverifyMcpbFile, which bundles node-forge's PKCS#7 stub. The app containsMCPB_SIG_V1/MCPB_SIG_END, and alsoverify:function(){throw Error("PKCS#7 signature verification not yet implemented.")}
verifyMcpbFilecallsp7.verify(...)inside atry, and thecatchreturns{ status: "unsigned" }. That is the path described in Signing/verification is non-functional: PKCS#7 signature never verified (node-forge stub), fails closed #260.
So status is never "signed", and points 1 and 2 together refuse everything once the policy is on.
Expected
Either the policy admits extensions that carry a valid signature from a trusted code-signing certificate, or it is not offered while verification cannot succeed.
Not verified
I derived this from the shipped code. I have not turned the policy on and tried to install. If the managed setting is read differently than the code suggests, I am glad to be corrected.
Related
- Signing/verification is non-functional: PKCS#7 signature never verified (node-forge stub), fails closed #260, verifyMcpbFile always reports signed extensions as "unsigned" (node-forge pkcs7.verify() is an unimplemented stub) #276,
mcpb verifyreports every signed bundle as "Extension is not signed" (node-forgep7.verifyis unimplemented) #277: PKCS#7 verification is a stub, so every signed bundle reads as unsigned - Fix PKCS#7 signature verification #195, fix: make
mcpb verify/infoactually verify PKCS#7 signatures #255, Verify signed MCPB bundles #286: open PRs that implement verification mcpb signproduces bundles that strict zip parsers reject - including Claude Desktop itself ("Invalid comment length") #278, Bug Report: Claude Desktop1.1.3647 (8f7c53) 2026-02-19T15:02:19.000Zcan't install signed extensions #194, fix: update ZIP EOCD comment_length when signing #204:mcpb sign2.1.2 (still the latest release) produces bundles that Claude Desktop rejects ("Invalid comment length"); fixed onmain, not released
Activity