feat: add MCPB manifest + auto-build .mcpb on every release tag - #13
Conversation
Lays the groundwork for submitting to the Anthropic Connectors Directory (https://claude.ai/directory). Submission flow needs an .mcpb bundle — a zip of the server with a manifest.json describing how to run it. This PR ships the bundle wiring; the human still does the final web-form submission (Anthropic has no automated submission API yet). ## What's new - manifest.json — MCPB spec v0.3 manifest. Declares server entry point, user_config block (ORCAROUTER_API_KEY field, required:false so catalog tools work without one), Privacy Policy URL, MIT license, icon, tools_generated:true. - assets/logo.png — 512×512 PNG (MCPB recommended), extracted from logo.gif and resized. - scripts/build-mcpb.sh — stages a clean bundle (dist + production-only node_modules + manifest + LICENSE + icon), runs `mcpb pack`. Local one- shot is `npm run pack:mcpb`. - .github/workflows/publish-mcp.yml — adds two trailing steps: 1. Build MCPB bundle via the same script 2. Create or update the GitHub Release for v$VERSION with the .mcpb attached (idempotent: re-runs replace the asset cleanly) Required `contents: write` permission added. - .gitignore — exclude .mcpb-stage/ and *.mcpb so local builds don't pollute commits. - package.json — `pack:mcpb` npm script. ## Local verification - `mcpb validate manifest.json` → schema passes; icon validation passes (with the "512×512 recommended" hint, which we now meet) - `npm run pack:mcpb` → produces orcarouter-mcp-1.1.4.mcpb (3.5 MB, unpacked 10.7 MB, 998 packed files of 2253 staged after .mcpbignore) - `mcpb info` on the bundle reports the expected name/version ## Remaining manual step (one-time, per release) After the next tag push, a release will exist with the .mcpb attached. Download it and upload to https://clau.de/desktop-extention-submission to land OrcaRouter in the Anthropic Connectors Directory.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 60306129d5
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Codex P1 on PR #13: manifest.json hard-codes version "1.1.4", but the publish workflow auto-builds .mcpb on every v* tag. On the next release (e.g. v1.1.5), the bundle filename and embedded package version would advance while the MCPB manifest stays at 1.1.4 — downstream Directory / update logic could treat new bundles as stale or duplicate. Fix: add manifest.json to the existing tag-vs-version validation step, right alongside package.json / server.json / server.json.packages[]. Now the workflow refuses to publish (or build a .mcpb) if any of the 4 places where a version lives are out of sync. The release PR pattern stays the same — bump versions manually in the PR, CI enforces correctness. No new auto-sync magic.
|
@codex review Good catch — manifest.json was outside the version-drift check, so a future release tag would have shipped a stale-version bundle. Fixed in 2206712: added `manifest.json.version` to the existing tag-vs-version validation step in publish-mcp.yml. Now the workflow validates all four version locations match the tag before doing anything destructive:
Same pattern as before — the release PR is the source of truth, CI just enforces. Please take another look. |
|
Codex Review: Didn't find any major issues. Hooray! ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Why
Lays the groundwork for submitting OrcaRouter to the Anthropic Connectors Directory. The Directory needs an
.mcpb(MCP Bundle) — a zip of the server + amanifest.jsondescribing how to run it.This PR ships the bundle wiring. The human still does the final web-form submission (Anthropic has no automated Directory submission API yet).
What's new
manifest.jsonuser_configblock (ORCAROUTER_API_KEYfield,required:falseso catalog tools work without one), Privacy Policy URL (https://www.orcarouter.ai/privacy.html), MIT license, icon,tools_generated:true.assets/logo.pnglogo.gifand resized.scripts/build-mcpb.shmcpb pack.package.jsonpack:mcpbscript..github/workflows/publish-mcp.ymlcontents: write..gitignore.mcpb-stage/and*.mcpb.How releases work after this lands
Last manual step (one-time, per release): download the
.mcpbfrom the GitHub Release and submit to https://clau.de/desktop-extention-submission to land in the Anthropic Connectors Directory.Local verification done
mcpb validate manifest.json— schema passes; icon at recommended 512×512npm run pack:mcpb→ producesorcarouter-mcp-1.1.4.mcpb(3.5 MB packed, 10.7 MB unpacked, 998 files included / 1255 ignored via default.mcpbignore)mcpb info <bundle>reports the expected name/versionpython3 -c 'import yaml; yaml.safe_load(...)')Idempotency
The Release step is idempotent: re-running the publish workflow for an existing tag uploads/replaces the
.mcpbasset cleanly viagh release upload --clobber. Same rerun-safety pattern as the npm + Registry publish steps already use.Out of scope (intentional)
iconsarray can be filled in a follow-up if Claude Desktop's UI ever needs theme-aware variants.Test plan
contents: writepermission expansion on the workflow is comfortable (needed to create the Release).