You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Builds on the provenance foundation to let users add their own MCP registry
sources, always tagged custom/unverified so their servers can never escape
quarantine. There is no allowlist a user can add themselves into.
- `mcpproxy registry add-source <https-url> [--protocol|--id|--name]`: daemon-first
CLI that adds a generic modelcontextprotocol/registry v0.1 endpoint. Writes
cfg.Registries copy-on-write via UpdateConfig + persists, and rebuilds the
effective catalog so the source is immediately searchable.
- Server keystone (add_from_registry): stamp SourceRegistryID/Provenance onto the
derived ServerConfig from the resolved registry; a custom/unverified source
forces Quarantined=true and SkipQuarantine=false regardless of the global
default (CN-002 extended).
- New add-source op (add_registry_source.go): pure URL→entry derivation (https
validation, id-from-host slug, v0.1 servers-url derivation) + guardrails
(registries_locked, no shadowing a built-in id, no duplicate). Stable
cross-surface error codes: invalid_registry_url / registries_locked /
registry_shadows_builtin / duplicate_registry.
- REST POST /api/v1/registries; cliclient.AddRegistrySource; provenance + trusted
surfaced in list_registries across runtime REST + MCP so a UI can show the
one-time third-party-registry warning.
- Docs: docs/registries.md trust model + add-source + registries_locked stub.
- OpenAPI regenerated.
TDD: add-source derivation/validation unit tests, custom-origin quarantine-always
keystone tests, and a registries integration test proving a user-added v0.1
endpoint is searchable AND tagged custom/unverified. Local: go build ./...,
config/registries/server/httpapi/cliclient/contracts/cmd suites green (-race on
the pure-logic packages), binary API + MCP e2e green, golangci-lint 0 issues,
approval-hash stability canary green.
Related MCP-866
Co-Authored-By: Paperclip <noreply@paperclip.ing>
@@ -4170,6 +4175,55 @@ func (s *Server) handleAddFromRegistry(w http.ResponseWriter, r *http.Request) {
4170
4175
})
4171
4176
}
4172
4177
4178
+
// handleAddRegistrySource godoc
4179
+
// @Summary Add a user-supplied registry source
4180
+
// @Description Adds a generic modelcontextprotocol/registry v0.1 https endpoint as a custom registry (MCP-866). The source is always tagged custom/unverified, so every server discovered through it lands quarantined and can never skip quarantine.
4181
+
// @Tags registries
4182
+
// @Accept json
4183
+
// @Produce json
4184
+
// @Param body body contracts.AddRegistrySourceRequest true "Registry source (https url + optional protocol/id/name)"
// @Summary Refresh a registry's cached server list
4175
4229
// @Description Invalidates the cached server lists for a registry so the next search re-fetches fresh data from the source (spec 070 FR-007). Returns how many cache entries were dropped.
@@ -4206,8 +4260,12 @@ func registryAddErrorStatus(code string) int {
0 commit comments