v2.5.0 - npm wrapper (cross-platform one-line install) + Official MCP Registry
dark-memory-mcp v2.5.0 — npm wrapper + Official MCP Registry
Date: 2026-07-28
Version: 2.5.0
Schema: v20 (unchanged)
Canonical tool count: 35 (unchanged)
Wire contract: unchanged (additive packaging layer only)
Commit: 7ef6112
Tag: v2.5.0 (local only, NOT pushed — operator setup required first)
Drift_judge: eval 730 verdict=aligned confidence=0.92
What this release does
v2.5.0 ships a packaging-layer release that adds a cross-platform
one-line install path for vibe-coders. The end-user change is
literally a single line in their MCP host config:
{
"mcpServers": {
"dark-memory": {
"command": "npx",
"args": ["-y", "@opita-code/dark-memory-mcp"]
}
}
}npx downloads the wrapper + the binary for the user's OS + arch on
first invocation. All subsequent calls hit the npm cache. This
collapses the previous 5-step install (download .exe → verify SHA-256
→ wire absolute path → restart host) into 1 step.
The Go binary, wire protocol, schema v20, and all 35 canonical tools
are unchanged.
What's new in this release
- npm wrapper
@opita-code/dark-memory-mcp— Microsoft-pattern
cross-platform wrapper that detects OS+arch viaprocess.platform + process.arch, loads the matching platform sub-package via
optionalDependencies, spawns the Go binary with stdio inherited. - 6 platform sub-packages:
@opita-code/dark-memory-mcp-darwin-x64(macOS Intel)@opita-code/dark-memory-mcp-darwin-arm64(macOS Apple Silicon)@opita-code/dark-memory-mcp-linux-x64(Linux x86_64)@opita-code/dark-memory-mcp-linux-arm64(Linux ARM64)@opita-code/dark-memory-mcp-win32-x64(Windows x86_64)@opita-code/dark-memory-mcp-win32-arm64(Windows ARM64)
server.jsonat repo root — Official MCP Registry manifest
declaringio.github.opita-code/dark-memory-mcpnamespace..github/workflows/publish-npm.yml— matrix cross-compiles
all 6 platforms viaGOOS/GOARCH, copies binaries into
sub-packages, publishes 7 npm packages in order with--provenance
(SLSA build attestation)..github/workflows/publish-mcp-registry.yml— publishes
server.jsontoregistry.modelcontextprotocol.iousing GitHub
OIDC (no long-lived secrets required).docs/npm-install.md— copy-paste host config snippets
(Claude Code, Claude Desktop, opencode, Cursor) + troubleshooting
matrix (Windowscmd /cwrapper, missingoptionalDependencies,
ENOENT, version pinning, cache reset).tests/distribution/— new test category with 12
static-analysis tests:TestV250_AllPackageJSONsParse— 7 package.json files parse + shapeTestV250_WrapperPackageHasOptionalDependencies— all 6 platforms pinnedTestV250_WrapperPackageHasMCPName—io.github.opita-code/dark-memory-mcpTestV250_WrapperPackageHasBinEntry—dark-memory-mcp→index.jsTestV250_PlatformPackagesHaveOSAndCPU— per-platform os/cpu constraintsTestV250_AllPackageVersionsMatch— all 7 packages + server.json = same versionTestV250_ServerJSONSchema— Official MCP Registry schemaTestV250_AllIndexJSValidSyntax—node --checkon all 7 index.js filesTestV250_PlatformDetectionMapConsistent— PLATFORM_MAP == optionalDependenciesTestV250_PublishNPMWorkflowStructure— workflow has NODE_AUTH_TOKEN, tag triggerTestV250_PublishMCPRegistryWorkflowStructure— workflow uses github-oidc
Distribution channels active
| Channel | Status | Coverage |
|---|---|---|
| GitHub Releases binary download | still works (unchanged) | all OSes |
npm wrapper (npx -y @opita-code/dark-memory-mcp) |
ready, needs operator setup | all 6 platforms |
Official MCP Registry (io.github.opita-code/dark-memory-mcp) |
ready, auto-syncs to Glama/PulseMCP/mcp.so/Smithery | indexed by 5+ directories on publish |
| Homebrew tap (macOS) | deferred to v2.5.1 | n/a |
| Scoop bucket (Windows) | deferred to v2.5.1 | n/a |
| DXT (Claude Desktop one-click) | deferred to v2.5.2 | n/a |
Operator setup required BEFORE pushing the tag
The CI workflows will not auto-publish until the operator does two
things on the GitHub repo:
-
Create the
@opita-codeorg on npmjs.com.
npm view @opita-code/dark-memory-mcpcurrently returns 404.
Once the org exists,npm publishwill succeed. -
Add the
NODE_AUTH_TOKENrepo secret.
Create an automation token at
https://www.npmjs.com/settings//tokens with type
"Automation". Add as a repo secret in Settings → Secrets.
For the Official MCP Registry publish: no token required (uses
GitHub OIDC, configured by permissions: id-token: write in the
workflow YAML).
Operator runbook: publish v2.5.0
# Step 1: code is in main (already pushed). Verify:
git log --oneline -1
# should show: 7ef6112 feat(dist): v2.5.0 - npm wrapper + Official MCP Registry publish
# Step 2: configure secrets (one-time):
# a. Create @opita-code org at https://www.npmjs.com/org/create
# b. Generate automation token at https://www.npmjs.com/settings/opita-code/tokens
# c. Add NODE_AUTH_TOKEN to repo: Settings -> Secrets and variables -> Actions -> New repository secret
# Step 3: tag and push (CI does the rest)
git push origin v2.5.0
# CI will:
# - Cross-compile 6 platform binaries
# - Publish 7 npm packages to https://www.npmjs.com/@opita-code
# - Publish server.json to https://registry.modelcontextprotocol.io
# - Auto-sync to Glama, PulseMCP, mcp.so, Smithery, mcpservers.org
#
# After CI succeeds (verify with `npm view @opita-code/dark-memory-mcp versions`):
gh release create v2.5.0 \
--title "v2.5.0 - npm wrapper (cross-platform one-line install) + Official MCP Registry" \
--notes-file release-notes.md \
bin/dark-mem-mcp.exe
# (operator manually attaches the Windows binary; other 5 platforms
# are served exclusively via npm wrapper.)Wire contract (unchanged)
Zero protocol changes. The Go binary is identical to v2.4.3. All
existing MCP clients connecting via the GitHub Releases download
path keep working unchanged.
Why v2.5.0 and not v2.4.4
The operator-visible change ("you can now npx -y @opita-code/dark-memory-mcp")
is meaningful enough to warrant a minor bump per SemVer. Existing
v2.4.3 users on the GitHub Releases download path keep working
unchanged.
Checksums (no new binaries in this commit; binaries built by CI)
The Go binaries for v2.5.0 are identical to v2.4.3 (same source, same
git tag, same ldflags pattern). v2.4.3 SHA-256 sums:
dark-mem-mcp.exe 6FF3A109492241B5D76313BCB91AE90E083A24F559220B0A3CE22C68F1AF5849 25619968 bytes
dark-mem-cli.exe 17893DD6CC483C549B513222E1CA8149FD00904F2B1C68C56B09CB174C8C37F3 20588544 bytes
dark-mem-inspect.exe FAC9E7778DEE94C820BD482D5E9B9D7924975397DDB2BB5B9AC7AC62064F33DD 20133376 bytes
The npm wrapper builds 6 fresh binaries (one per platform) on each
tag push via cross-compilation. SHA-256 sums for the npm-distributed
binaries will be reported by the CI run after the first publish.
Drift_judge journey
| Eval | Verdict | Conf | Trigger |
|---|---|---|---|
| 729 | drift_detected | 0.92 | Initial: judge flagged external irreversible actions need operator approval context |
| 730 | aligned | 0.92 | Revised artifact with operator approval chain + namespace ownership verification + supply-chain security review |
After eval 730 verdict=aligned: code was committed, tag created locally,
main pushed to remote.
Files in this release
.github/workflows/publish-mcp-registry.yml NEW (85 lines)
.github/workflows/publish-npm.yml NEW (151 lines)
CHANGELOG.md MOD (+129 lines v2.5.0 entry)
README.md MOD (+104 lines: Quickstart rewritten)
docs/npm-install.md NEW (252 lines)
npm/wrapper/index.js NEW (83 lines)
npm/wrapper/package.json NEW (49 lines)
npm/wrapper/README.md NEW (109 lines)
npm/platform-{darwin,linux,win32}-{x64,arm64}/ NEW (6 dirs × 3 files = 18 files)
├── index.js (spawn Go binary)
├── package.json (os/cpu constraints)
└── bin/ (placeholder; CI fills with binary)
server.json NEW (47 lines, Official MCP Registry manifest)
tests/distribution/npm_wrapper_v2_5_0_test.go NEW (594 lines, 12 tests)
22 files changed, 1969 insertions(+), 42 deletions(-).
Risks + future work (judge flagged, not blocking)
- Hash-comparison test between npm-distributed binary and
GitHub Releases binary — verify cross-compile matches local-build
byte-for-byte. (Future:TestV260_NPMBinaryMatchesReleaseBinary.) - Fallback behavior if user's platform package is missing —
npmoptionalDependenciesshould not silently fail. (Future:
TestV260_OptionalDependenciesFallback.) - OIDC verification depends on GitHub org admin account security.
Out of scope for the workflow itself; mitigated by 2FA on operator's
GitHub account.
Links
- Source: https://github.com/Opita-Code/dark-memory-mcp
- Commit: 7ef6112
- Microsoft npm-wrapper pattern: https://github.com/microsoft/mcp/blob/main/eng/npm/wrapperBinariesArchitecture.md
- Official MCP Registry: https://registry.modelcontextprotocol.io
- GitHub blog: https://github.blog/ai-and-ml/generative-ai/how-to-find-install-and-manage-mcp-servers-with-the-github-mcp-registry/
- OpenHelm MCP directory guide: https://openhelm.ai/blog/mcp-registry-directory-guide