envpact-registry-publisher
Programmatic submission of MCP servers to every public MCP registry — on every npm publish, automatically.
Live docs: https://envpact-registry-publisher-npm-cli.oriz.in
Replaces the manual MCPREGISTRYSUBMISSION.md checklist with a single CLI + GitHub Action that runs at the tail of envpact-mcp's publish workflow (or anyone else's).
Why this exists
The MCP-registry ecosystem in 2026 is split across:
| Registry | Submission method | | :--- | :--- | | Official MCP Registry (registry.modelcontextprotocol.io) | mcp-publisher CLI + server.json | | Smithery (smithery.ai) | API endpoint + bearer token (Playwright fallback if API rejects) | | glama.ai | Passive — auto-indexes from the official registry | | PulseMCP | Passive — same | | mcp.so | Web form only (Playwright drives it) | | punkpeye/awesome-mcp-servers | Pull request (driven by gh CLI) |
Doing six different things by hand on every release does not scale.
Install
npm install -g envpact-registry-publisherOr run as a GitHub Action:
- uses: chirag127/envpact-registry-publisher@v0
with:
server-json: ./server.json
env:
SMITHERY_API_KEY: ${{ secrets.SMITHERY_API_KEY }}
MCP_PUBLISHER_TOKEN: ${{ secrets.MCP_PUBLISHER_TOKEN }}
GH_PAT: ${{ secrets.GH_PAT_FOR_PR }}Use
envpact-registry-publish ./server.jsonThe CLI walks every adapter in priority order, reports per-registry status, and exits non-zero if any required adapter fails. It is safe to re-run — every adapter is idempotent.
What server.json looks like
{
"name": "io.github.chirag127/envpact-mcp",
"description": "Centralised secrets manager for AI agents.",
"version": "0.4.0",
"homepage": "https://envpact.oriz.in",
"repository": "https://github.com/chirag127/envpact-mcp",
"npm_package": "envpact-mcp",
"license": "MIT",
"categories": ["productivity", "developer-tools"],
"install": {
"command": "npx",
"args": ["-y", "envpact-mcp"]}