Register MCP reference servers in the official MCP Registry#3175
Register MCP reference servers in the official MCP Registry#3175olaservo wants to merge 4 commits into
Conversation
Add registry metadata files for 7 reference servers: - everything (npm, with stdio/sse/streamable-http transports) - filesystem (npm) - memory (npm) - sequentialthinking (npm) - fetch (pypi) - git (pypi) - time (pypi) Uses placeholder version "0.0.0" to be updated by release.py at publish time. Closes modelcontextprotocol#3047 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add update_server_json() method to NpmPackage and PyPiPackage classes that updates both root version and packages[*].version fields when releasing. This ensures server.json files stay in sync with package.json/pyproject.toml versions for MCP registry publishing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add publish-registry-npm and publish-registry-pypi jobs to the release workflow. These jobs automatically publish server metadata to the MCP Registry after successful npm/pypi package publishing. Key features: - Uses GitHub OIDC authentication (no secrets required) - Checks for server.json existence before publishing - Runs in parallel with existing publish jobs 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
@claude review |
|
Claude finished @cliffhall's task in 2m 11s —— View job Code Review
Overall this is a well-structured PR that cleanly integrates the reference servers into the MCP Registry. The approach (OIDC auth, no secrets required, automatic version sync) is sound. A few items worth addressing before merge: Security: Binary download without checksum verification
curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_linux_amd64.tar.gz" | tar xz mcp-publisherDownloading and immediately executing an untrusted binary without hash verification is a supply chain risk. If the upstream release is compromised or the download is intercepted (despite HTTPS), malicious code would run in the release pipeline with Suggested fix: pin to a specific version and verify a checksum, e.g.: VERSION="v0.1.2" # pin exact version
curl -L "https://github.com/modelcontextprotocol/registry/releases/download/${VERSION}/mcp-publisher_linux_amd64.tar.gz" -o mcp-publisher.tar.gz
echo "expected_sha256 mcp-publisher.tar.gz" | sha256sum -c
tar xz -f mcp-publisher.tar.gz mcp-publisherLogic: Matrix-level success gate skips successful registrations
if: ${{ needs.publish-npm.result == 'success' }}
This is probably not the desired behavior. If Code quality: Duplicate
|
| Severity | Issue |
|---|---|
| 🔴 Security | Binary downloaded without checksum verification (release.yml) |
| 🟡 Logic | Matrix failure gates entire registry publish job |
| 🟡 Code quality | update_server_json duplicated in NpmPackage and PyPiPackage |
| 🟢 Informational | SSE transport in everything/server.json is deprecated |
| 🟢 Informational | Placeholder 0.0.0 versions need a first-publish trigger |
| 🟢 Informational | filesystem/server.json lacks argument hints for end users |
The security item should be addressed before merging given the pipeline has OIDC token write permissions. The logic issue is worth a follow-up or at minimum a comment in the workflow explaining the tradeoff.
- Pin mcp-publisher to v1.7.9 with sha256 checksum verification in both
registry publish jobs (was: latest binary, no verification — risky given
the jobs hold id-token: write permissions).
- Loosen the matrix-level success gate to !cancelled() && (success || failure)
so partial matrix failures in publish-npm/publish-pypi don't block successful
packages from being registered; mcp-publisher surfaces per-package failures
naturally when the upstream package version is missing.
- Extract duplicated update_server_json bodies in scripts/release.py into a
shared _update_server_json helper.
- Replace 0.0.0 placeholder versions in all server.json files with current
published versions so initial registry entries aren't stale.
- everything/server.json: drop deprecated SSE entry; fix invalid streamable-http
entry (transport requires a url) by adding http://localhost:{PORT}/mcp with
a PORT environment variable hint (default 3001).
- filesystem/server.json: add packageArguments describing the required
allowed_directory positional arg (repeatable, format: filepath).
- Fix packageArguments shape across all files to use Argument objects per
schema (positional with valueHint), replacing plain string arrays.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Description
This PR adds infrastructure to automatically register and update 7 MCP reference servers in the official MCP Server Registry. It includes:
server.jsonfiles for all 7 local servers (everything, filesystem, memory, sequentialthinking, fetch, git, time)release.pyto keepserver.jsonversions aligned with package versionsCloses #3047
Server Details
Motivation and Context
The MCP Server Registry is now the official way to discover MCP servers. This PR registers the reference servers so they appear in the registry and stay updated automatically with each release.
Key benefits:
How Has This Been Tested?
server.jsonfiles validated against the registry schemarelease.pychanges tested locally to verify version sync logicFull end-to-end testing requires merging and triggering a release to verify OIDC authentication with the registry.
Breaking Changes
None. This is additive infrastructure that doesn't affect existing server functionality or user configurations.
Types of changes
Checklist
Additional context
Files Added
Files Modified
CI Workflow
Out of Scope
The docs remote server (
modelcontextprotocol.io/mcp) is not included in this PR and can be tracked separately here: modelcontextprotocol/modelcontextprotocol#2046