Manual MCP Registry Publishing
If the automated GitHub Actions workflow fails or you need to publish server.json manually, follow this fallback runbook.
Prerequisites
- Node.js 20+ installed
@modelcontextprotocol/publisherCLI installed globally- Domain ownership verified at self.agency
Step 1: Install mcp-publisher CLI
npm install -g @modelcontextprotocol/publisher@latestStep 2: Verify server.json
Confirm docs/public/server.json exists and has correct values:
# Verify mcpName matches package.json
jq '.name' docs/public/server.json # Should be: io.github.voxslopuli/teamdynamix-mcp
jq '.packages[0].identifier' docs/public/server.json # Should be: @voxslopuli/teamdynamix-mcp
# Verify version alignment
jq '.version' docs/public/server.json # Should match package.json version
jq '.packages[0].version' docs/public/server.json # Should match package.json versionExpected structure:
namematchespackage.json.mcpNameversionmatchespackage.json.versionpackages[0].identifieris@voxslopuli/teamdynamix-mcpenvironmentVariablesincludes all required TeamDynamix env vars
Step 3: Publish server.json
From the repository root:
# Publish to MCP Registry
mcp-publisher publish docs/public/server.json --domain self.agencyExpected output:
✓ Validated server.json
✓ Domain ownership verified: self.agency
✓ Published io.github.voxslopuli/teamdynamix-mcp v0.2.0Step 4: Verify publication
Confirm:
- Server name:
io.github.voxslopuli/teamdynamix-mcp - Version: Matches your published version
- Environment variables documented correctly
- Package listing shows npm transport
Check that your server appears in the MCP Registry:
# Search for your server (when CLI search is available)
mcp-publisher search io.github.voxslopuli/teamdynamix-mcp
# Or verify via web UI at modelcontextprotocol.ioConfirm:
- Server name:
io.github.voxslopuli/teamdynamix-mcp - Version: Matches your published version
- Environment variables documented correctly
- Package listing shows npm transport
Troubleshooting
Domain ownership not verified
Error: Domain ownership verification failed for self.agency
Fix:
- Visit MCP Registry domain verification
- Follow the DNS or TXT record verification steps
- Wait for propagation (may take up to 24 hours)
- Retry publish command
Invalid server.json
Error: server.json validation failed: mcpName does not match package.json
Fix:
- Run
pnpm buildto sync versions - Check
dist/package.jsoncontainsmcpNamefield - Verify
server.json.versionmatchespackage.json.version
Auth token invalid
Error: Authentication failed: Invalid MCP_PUBLISHER_TOKEN (manual/local token flow)
Fix:
- Regenerate domain auth token at MCP Registry dashboard
- Ensure token is set in
MCP_PUBLISHER_TOKENenv var - Check for trailing spaces or newline in token value
Version mismatch
Error: Package version X.Y.Z in npm does not match server.json version A.B.C
Fix:
- Run
npm publishto push npm package first - Wait for npm registry propagation (usually < 1 minute)
- Retry
mcp-publisher publish docs/public/server.json
CI workflow failure
If GitHub Actions workflow .github/workflows/release.yml fails:
- Check workflow logs for specific error
- Confirm OIDC permissions are present (
id-token: write,contents: read) - Verify domain ownership is configured for
self.agency - If the failure was in the manual dispatch path, confirm a valid
versioninput was provided (for example1.2.3orv1.2.3) - Confirm the selected run ref/commit is the one you intend to release
- Confirm
docs/public/server.jsonis committed to the branch/tag being published - Re-run workflow after fixing issue
Automation notes
- Automated trigger: The workflow runs automatically on git tags matching
v*(e.g.,v0.2.0) - Manual trigger: Use GitHub Actions UI to run
Releasewith a requiredversioninput (1.2.3orv1.2.3) - Manual run behavior: The workflow validates/builds/tests the selected ref, derives the release tag from
version, then publishes npm + GitHub Release + MCP Registry metadata - Tag trigger: Pushing a
v*tag runs the same workflow and uses that tag as release metadata - Publish order: After CI succeeds, the workflow publishes npm first, then GitHub Release assets/notes, then MCP Registry metadata from
docs/public/server.json
Required secrets
For GitHub Actions CI/CD with OIDC:
No npm token is required. The workflow publishes to npm using npm trusted publishing with GitHub Actions OIDC, and publishes to MCP Registry using OIDC at self.agency.
Workflow requirements:
id-token: writepermission must be present on the release job- the npm package must have a trusted publisher configured for this repository/workflow
- no
NPM_TOKENsecret is required for the GitHub Actions release flow
For manual publishing:
- You must manually authenticate with your domain credentials or use the MCP Registry dashboard to publish server.json directly
OIDC Authentication
This repository uses OpenID Connect (OIDC) in two places during automated release:
- npm publish: GitHub Actions
release.ymluses npm trusted publishing via OIDC withoutNPM_TOKEN - MCP Registry publish: GitHub Actions
release.ymlauthenticates automatically using OIDC without secrets - Manual (local): Requires domain credentials or dashboard access
- Security: OIDC provides short-lived tokens, reducing credential exposure risk
- Domain verification: Your domain (
self.agency) must be verified with the MCP Registry
Related guides
- Getting started - Initial setup and configuration
- Troubleshooting - Common issues and resolutions
- Development architecture - Build and test procedures