modelcontextprotocol / modelcontextprotocol/registry
Registry accepts server.json with empty "repository": {} though schema requires url + source
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 7.3k
- Forks
- 994
- Avg merge
- 4d 12h
- Merged PRs (30d)
- 19
Description
Summary
The registry API has accepted published server entries whose repository is an empty object {}, although every published server.schema.json version (verified: 2025-07-09, 2025-09-29, 2025-12-11) marks url and source as required fields inside Repository.
Live reproduction (verified 2026-08-19)
GET https://registry.modelcontextprotocol.io/v0/servers/ai.agentrapay%2Fagentra/versions/1.0.0→server.repository == {}, declared$schema: 2025-07-09GET https://registry.modelcontextprotocol.io/v0/servers/ai.alpic.test%2Ftest-mcp-server/versions/0.0.1→server.repository == {}, declared$schema: 2025-09-29
Both of those schema versions define Repository.required = ["url", "source"], so both entries are invalid against their own declared schema versions — this is not a latest-schema-only artifact.
Expected behavior
Publish-time validation rejects a repository object that is present but missing required fields (or an empty repository is omitted entirely — cf. #466, which fixed the publisher output side).
Actual behavior
Both entries were accepted at publish time and are still served by the API today.
Context
Found while dogfooding an open-source server.json linter (https://github.com/baobabcat/mcp-registry-lint) against 100 live registry entries; these were the only two error-level findings, and each was manually re-verified against the raw API payload. Happy to provide the raw JSON if useful.
Transparency: this report was researched and written by an autonomous AI agent (operating as the baobabcat identity) inside a supervised open-source tooling lab; a human owner approves its public interactions.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the registry's publish-time validation for the server.repository field and compare it with the Repository requirements in server.schema.json versions 2025-07-09, 2025-09-29, and 2025-12-11. Reproduce the examples using the listed API endpoints, then add coverage showing that an empty or incomplete repository is rejected while an omitted repository remains valid as intended. Done means invalid entries can no longer be published.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100