Repository navigation
Receive "title":"Bad Request","status":400,"detail":"Failed to publish server" for package not found #553
Description
Activity
@sfc-gh-jsummer Will check the issue and get back on this. CC @tadasant @rdimitrov
I was able to publish my package
mcp-publisher publish server.json Publishing to https://registry.modelcontextprotocol.io... ✓ Successfully published ✓ Server Id xxx version 0.1.1I checked your package also exists and I am able to find it via API. It looks like this version was recently released. When publish action was happening there might be these issues because of which it might have happened
- CDN propagation delays - Different PyPI mirrors/CDNs might not have the package yet
- Regional availability issues - The package might not be available from all geographic locations yet.
Can you try to publish it again?
Ah perfect. It successfully published now:
Run mcp-publisher publish Publishing to https://registry.modelcontextprotocol.io.../ ✓ Successfully published ✓ Server Id cd9210af-efe4-4112-97c2-32e2a6f25813 version 1.3.3Thanks for the help!
Reacted by Preeti DewaniI had the same error in my mcp registry cli package, I had to update the api to make it working back!
Interestingly I see a number of different version of deployments for the same package from the API, so I will collect them and make as default the latest version, or support all versions available.
Okay, I have added versions support in version 0.3.2! Far better now!

I am seeing this same error when trying to publish from GitHub actions. The release does exist in the PyPI API, so I don't think it's a CDN caching issue. I am able to publish manually without issue.
Failed job run logs:
Run ./scripts/publish_mcp_registry.py Error: Failed to publish to MCP Registry Error: publish failed: server returned status 400: {"title":"Bad Request","status":400,"detail":"Failed to publish server","errors":[{"message":"registry validation failed for package 0 (linux-mcp-server): PyPI package 'linux-mcp-server' not found (status: 404)"}]} Publishing version: refs/tags/1.3.2 Downloading mcp-publisher from https://github.com/modelcontextprotocol/registry/releases/download/v1.4.0/mcp-publisher_linux_amd64.tar.gz Updating version in server.json Authenticating to MCP Registry via GitHub OIDC Publishing server to MCP Registry Error: Process completed with exit code 1.The release, 1.3.2 in this case, does exist in the PyPI API.
> https https://pypi.org/pypi/linux-mcp-server/json | jello "list(_['releases'])" [ "0.1.0.dev0", "0.1.0a1", "0.1.0a2", "0.1.0a3", "0.1.0a4", "1.0.0", "1.0.1", "1.1.0", "1.2.0", "1.2.1", "1.3.0", "1.3.1", "1.3.2" ]Do you have any tips on the best way to troubleshoot this?
I too seem to be facing caching issues. when first using the wrong
"mcpName": "io.github.theupsider/lsp-mcp",and then replacing it with"mcpName": "io.github.theUpsider/lsp-mcp",(Note the small typo for the name), the request comes back asPublishing to https://registry.modelcontextprotocol.io... Error: publish failed: server returned status 400: {"title":"Bad Request","status":400,"detail":"Failed to publish server","errors":[{"message":"registry validation failed for package 0 (@theupsider/lsp-mcp): NPM package ownership validation failed. Expected mcpName 'io.github.theUpsider/lsp-mcp', got 'io.github.theupsider/lsp-mcp'"}]}Clearly there is a cache at work here that just got the first npm package and sits on it ever since.
The 404 here comes from the validator fetching the version-specific PyPI URL (
/pypi/{name}/{version}/json) and reporting any non-200 as "package not found". So a package that exists but whose requested version is missing (or just isn't up yet) gets reported as if the whole package is gone. The npm validator does the same thing.Quick repro, a real package at a version that doesn't exist:
PyPI package 'requests' not found (status: 404)where it could say:
PyPI package 'requests' exists, but version '99.99.99' was not found (status: 404). A newly published release can take a moment to appear on PyPI. Wait and retry, or publish version '99.99.99' before registering itThe fix, on a version 404, sends a HEAD to the package-level endpoint to tell "package missing" from "version missing", and reports 429/5xx as transient instead of "not found". Same probe-and-classify pattern as the existing cargo validator. Scoped to error surfacing only, no auto-retry.
Happy to open a PR if this one's unclaimed.
- added a commit that references this issue
on Jul 12, 2026
Running mcp-publisher publish in GitHub action after successful github-oidc login returns
Error: publish failed: server returned status 400: {"title":"Bad Request","status":400,"detail":"Failed to publish server","errors":[{"message":"registry validation failed for package 0 (snowflake-labs-mcp): PyPI package 'snowflake-labs-mcp' not found (status: 404)"}]}However, snowflake-labs-mcp exists in PyPI.
Expected behavior
Server should be successfully published.
Logs
Error: publish failed: server returned status 400: {"title":"Bad Request","status":400,"detail":"Failed to publish server","errors":[{"message":"registry validation failed for package 0 (snowflake-labs-mcp): PyPI package 'snowflake-labs-mcp' not found (status: 404)"}]}
Additional context
README contains
<!-- mcp-name: io.github.Snowflake-Labs/mcp -->.server.json is attached.
server.json
Github Action workflow file attached.
publish-mcp.yml