docs: correct contributor prerequisites and stale dev-env references (#1520)

The README prerequisites were both stale, and the docs restated the Go
version in three places.

## Prerequisites: name the source, do not restate the version

| README said | Reality |
|---|---|
| `Go 1.24.x` | `go 1.26` in
[go.mod](https://github.com/modelcontextprotocol/registry/blob/main/go.mod)
|
| `golangci-lint v2.4.0` | `v2.11.4` pinned in
[ci.yml:30](https://github.com/modelcontextprotocol/registry/blob/main/.github/workflows/ci.yml#L30)
|

Rather than swap in fresher numbers — which only resets the clock on the
same drift — this **removes the numbers** and names the authoritative
file:

```
- **Go** - version per the `go` directive in go.mod; the Go toolchain fetches it for you
- **golangci-lint** - version per the `golangci-lint-action` pin in ci.yml, so local lint matches CI
```

The Go version was stated in **three** places, which is exactly why all
three drifted together. All three now point at a single source, so the
prerequisites list cannot go stale.

Two notes on why the numbers earn so little in prose:

- **Go corrects itself.** `go.mod` has no `toolchain` directive, so
under the default `GOTOOLCHAIN=auto` the toolchain downloads the
required version automatically. A contributor on an older Go gets an
upgrade, not a failure — it only hard-errors under `GOTOOLCHAIN=local`.
(An earlier version of this description said such a contributor "cannot
build"; that was too strong.)
- **golangci-lint does not.** Version skew here genuinely changes what
you see: running CI's config under a newer golangci-lint (2.12.2)
surfaces 23 `goconst` findings in
`cmd/publisher/commands/validate_test.go` that CI's pinned 2.11.4 does
not report. That is why the README now points at the pin rather than a
number someone has to keep in sync.

## `make check` does more than documented

Documented in three files as "lint, unit tests and integration tests".
Actually [`check: dev-down lint validate
test-all`](https://github.com/modelcontextprotocol/registry/blob/main/Makefile#L85)
— it also runs schema validation and **stops your running `dev-compose`
environment**. Worth knowing before running it mid-session. The
Makefile's own `##` help string already said this correctly; only the
prose was stale.

## Other verified corrections

- **README project structure** omitted `cmd/registry/` — the server
entry point and ko/goreleaser build target — and `internal/importer/`.
- **`tests/integration/README.md`** said the suite launches **MongoDB**.
It launches PostgreSQL (`postgres-integration-test`), as the same file
admits nine lines later. It also cited `/v0/servers/{server_id}`, a path
removed a while ago; the test actually calls `GET /v0/servers` and `GET
/v0/servers/{serverName}/versions/latest`
([main.go:210,255](https://github.com/modelcontextprotocol/registry/blob/main/tests/integration/main.go#L210)).
- **`scripts/mirror_data/README.md`** pointed at
`internal/database/migrations/008_separate_official_metadata.sql`, which
does not exist — that migration is `009_`, while `008_` is
`clean_invalid_data.sql`. (Migration 008's own header still calls itself
"007a", which is how the numbering slipped.) Also swapped two "edit line
NN" pointers for identifier names, since both had already drifted
(`maxMigration` is at :30 not :24; the connection string at :23 not
:17), and corrected the fetch URL from `/v0.1/servers` to the
`/v0/servers` the script actually requests.
- **`.env.example`** was missing
`MCP_REGISTRY_ENABLE_REGISTRY_VALIDATION`, even though the config reads
it
([config.go:18](https://github.com/modelcontextprotocol/registry/blob/main/internal/config/config.go#L18))
and README:50 tells contributors to set it while pointing at
`.env.example` as *the* reference.
- **`docker-compose.yml`** set `MCP_REGISTRY_ENVIRONMENT`, which nothing
reads — no `ENVIRONMENT` env tag in `internal/config`, and no other
occurrence in the repo. Removed. (The Pulumi-side
`mcp-registry:environment` key is a separate, real thing and is
untouched.)
- **Deleted `CHANGES.md`** — 0 bytes, untouched since the squashed
history base, zero references anywhere.

## Verification

`docker compose config` validates. `grep` for `Go 1.x` / `golangci-lint
vX` across all `.md`/`.mdx` now returns nothing outside `complete.md`
(which #1522 deletes). Both `../../README.md#pre-requisites` links
resolve and the anchor matches the real `#### Pre-requisites` heading.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Radoslav Dimitrov 2026-08-10 16:32:25 +03:00 • committed by GitHub
commit 3e463e52bb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -14,7 +14,7 @@ These scripts help you:
## Prerequisites
- Go 1.24.x
- Go — see the [prerequisites in the root README](../../README.md#pre-requisites) for the required version
- PostgreSQL (via Docker or local installation)
- Required Go packages:
```bash
@ -31,7 +31,7 @@ go run scripts/mirror_data/fetch_production_data.go
```
This will:
- Fetch all servers from https://registry.modelcontextprotocol.io/v0.1/servers
- Fetch all servers from https://registry.modelcontextprotocol.io/v0/servers
- Handle pagination automatically
- Save data to `scripts/mirror_data/production_servers.json`
- Be respectful to the API with rate limiting
@ -71,7 +71,7 @@ This will:
4. Analyze the data and report statistics
5. Show sample servers with NULL status values
To test a different migration, edit `maxMigration` in the script (line 24)
To test a different migration, edit `maxMigration` in `load_production_data.go`
### 4. Test Migrations
@ -80,8 +80,8 @@ After loading the data, you can test migrations against real production data.
#### Testing a Single Migration
```bash
# Test migration 008
cat internal/database/migrations/008_separate_official_metadata.sql | \
# Test the separate_official_metadata migration
cat internal/database/migrations/009_separate_official_metadata.sql | \
docker exec -i test-postgres psql -U postgres -d registry_test
```
@ -90,7 +90,7 @@ cat internal/database/migrations/008_separate_official_metadata.sql | \
1. **Check the error output:**
```bash
# Run migration and capture all output
cat internal/database/migrations/008_separate_official_metadata.sql | \
cat internal/database/migrations/009_separate_official_metadata.sql | \
docker exec -i test-postgres psql -U postgres -d registry_test 2>&1 | \
grep -E "(ERROR|NOTICE|WARNING)"
```
@ -126,7 +126,7 @@ EOF
# Start a transaction to test and rollback
docker exec test-postgres psql -U postgres -d registry_test <<EOF
BEGIN;
\i /dev/stdin < internal/database/migrations/008_separate_official_metadata.sql
\i /dev/stdin < internal/database/migrations/009_separate_official_metadata.sql
-- Inspect the results
\d servers
SELECT COUNT(*) FROM servers;
@ -145,7 +145,7 @@ go run scripts/mirror_data/load_production_data.go
2. **Test your migration changes:**
```bash
cat internal/database/migrations/008_separate_official_metadata.sql | \
cat internal/database/migrations/009_separate_official_metadata.sql | \
docker exec -i test-postgres psql -U postgres -d registry_test
```
@ -183,7 +183,7 @@ The `load_production_data.go` script connects to:
- User: `postgres`
- Password: `testpass`
Modify line 17 in the script if you need different connection parameters.
Modify the `sql.Open` connection string in `load_production_data.go` if you need different connection parameters.
## Example Output
@ -234,4 +234,4 @@ docker logs test-postgres
```
### Migration failures
The script stops at migration 007 intentionally. To test migration 008, run it manually after the data is loaded.
The script stops at migration 007 intentionally. To test later migrations (008 onwards), run them manually after the data is loaded, in order.