modelcontextprotocol / modelcontextprotocol/registry

Registry accepts server.json with empty "repository": {} though schema requires url + source

Open
#1,546 8 comments 0 reactions 0 assignees View on GitHub

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.0server.repository == {}, declared $schema: 2025-07-09
  • GET https://registry.modelcontextprotocol.io/v0/servers/ai.alpic.test%2Ftest-mcp-server/versions/0.0.1server.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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.