Commit graph

151 commits

Author SHA1 Message Date
adam jones
e9fe6f9ab8
feat: Add creds for GitHub auth, add "none" auth to publisher (#276)
## Motivation and Context

- Adds credentials for the new MCP Registry Login GitHub Apps (local,
staging, prod)
- Adds support for "none" auth to publisher

## How Has This Been Tested?

- Tested publisher workflows locally
- Unit and integration tests passing

## Breaking Changes

None

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [x] I have added appropriate error handling
- [x] I have added or updated documentation as needed

---

Merging based on Tadas's approval review, and only making minor docs changes on top of that.
2025-08-18 15:49:04 +01:00
adam jones
d555acb65b
infra: Recreate pods on infra deploys (#275)
## Motivation and Context

In staging (and prod, for now) we pull the `:latest` mcp-registry image.
But K8s won't actually change anything unless we recreate the pods.

This change ensures the workflow goes from docker -> staging -> prod,
and changes the annotation so that the pods are recreated each deploy.
This ensures they actually pull the latest version.

## How Has This Been Tested?

Deployed locally to minikube

## Breaking Changes

None

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [x] I have added appropriate error handling
- [x] I have added or updated documentation as needed
2025-08-18 12:56:20 +01:00
adam jones
c733cedaf8
auth: New auth flow (#273)
Fixes #264. Adds endpoints:

```
/v0/auth/github    # exchange a github token for a registry token that gives you access to namespaces io.github.username and io.github.org for your orgs
/v0/auth/none     # get a registry token for namespace io.modelcontextprotocol.anonymous (only for testing/local dev purposes)
```

Updates `/v0/publish` to accept one of these registry tokens.

## Motivation and Context

See #264

## How Has This Been Tested?

- Running locally and getting a token from `/v0/auth/none` and then
publishing to `/v0/publish`
- Updating the integration tests that get a token and then publish, and
them passing

## Breaking Changes

This is a breaking change to the auth API. This is fine for registry
given it's not deployed yet.

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [x] Breaking change (fix or feature that would cause existing
functionality to change)
- [x] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [x] I have added appropriate error handling
- [x] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->

---------

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: adam jones <domdomegg@users.noreply.github.com>
2025-08-15 13:03:35 +01:00
adam jones
95bf1e3e30
infra: Improve local development flow and avoid false positive infra diffs (#267) 2025-08-15 12:13:51 +01:00
adam jones
01a6ce5fb2
infra: Update Ingress configuration to support prod registry domain at registry.modelcontextprotocol.io (#266)
i.e.

```diff
staging.registry.modelcontextprotocol.io -> staging
prod.registry.modelcontextprotocol.io -> prod
+ registry.modelcontextprotocol.io -> prod
```
2025-08-13 19:12:25 +01:00
adam jones
79fdd2d9d5
infra: Always pull latest images (#265)
The Always pull policy is needed for the latest tag to force Kubernetes
to pull the newest image on every pod creation, even if an image with
that tag already exists locally. Without this, pods might use outdated
cached versions since the latest tag is mutable and can point to
different images over time.
2025-08-13 19:12:16 +01:00
adam jones
6b84493ca9
api: Use Huma to generate swagger docs and parse JSON automatically (#262)
## Motivation and Context

Currently there's a lot of unsafe manual JSON unmarshalling/marshalling,
and we have to manually keep the openapi schema in sync.

This PR migrates the API to
[Huma](https://github.com/danielgtaylor/huma), which appears like a
popular, well-maintained way to build APIs in Golang. I'm not a Golang
expert, but seemed highly recommended by Reddit + Claude and has a
decent star count. It provides automatic openapi spec generation and
docs hosting, JSON parsing, as well as the ability to add auth
middlewares etc.

## How Has This Been Tested?

Running locally, and poking at the endpoints

## Breaking Changes

Docs are served at `/docs` rather than `/v0/swagger/index.html` now

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [x] Breaking change (fix or feature that would cause existing
functionality to change)
- [x] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [x] I have added appropriate error handling
- [x] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->
2025-08-13 16:57:55 +01:00
dependabot[bot]
122dbf6a68
chore(deps): bump the go_modules group across 2 directories with 5 updates (#261)
Bumps the go_modules group with 1 update in the / directory:
[golang.org/x/crypto](https://github.com/golang/crypto).
Bumps the go_modules group with 5 updates in the /deploy directory:

| Package | From | To |
| --- | --- | --- |
| [golang.org/x/crypto](https://github.com/golang/crypto) | `0.37.0` |
`0.41.0` |
| [github.com/cloudflare/circl](https://github.com/cloudflare/circl) |
`1.3.7` | `1.6.1` |
| [github.com/go-git/go-git/v5](https://github.com/go-git/go-git) |
`5.13.1` | `5.16.2` |
| [google.golang.org/grpc](https://github.com/grpc/grpc-go) | `1.67.1` |
`1.74.2` |
| google.golang.org/protobuf | `1.36.6` | `1.36.7` |


Updates `golang.org/x/crypto` from 0.37.0 to 0.41.0
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ef5341b706"><code>ef5341b</code></a>
go.mod: update golang.org/x dependencies</li>
<li><a
href="b999374650"><code>b999374</code></a>
acme: fix pebble subprocess output data race</li>
<li><a
href="c247dead11"><code>c247dea</code></a>
x509roots/fallback: store bundle certs directly in DER</li>
<li><a
href="1fda73153f"><code>1fda731</code></a>
acme: increase pebble test waitForServer attempts</li>
<li><a
href="1b4c3d2e8c"><code>1b4c3d2</code></a>
x509roots/fallback: update bundle</li>
<li><a
href="b903b535d3"><code>b903b53</code></a>
acme: capture pebble test subprocess stdout/stderr</li>
<li><a
href="459a9db11b"><code>459a9db</code></a>
go.mod: update golang.org/x dependencies</li>
<li><a
href="74e709ad8a"><code>74e709a</code></a>
ssh: add AlgorithmNegotiationError</li>
<li><a
href="b3790b8d91"><code>b3790b8</code></a>
acme: fix TLSALPN01ChallengeCert for IP address identifiers</li>
<li><a
href="1dc4269656"><code>1dc4269</code></a>
acme: add Pebble integration testing</li>
<li>Additional commits viewable in <a
href="https://github.com/golang/crypto/compare/v0.37.0...v0.41.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `golang.org/x/crypto` from 0.37.0 to 0.41.0
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ef5341b706"><code>ef5341b</code></a>
go.mod: update golang.org/x dependencies</li>
<li><a
href="b999374650"><code>b999374</code></a>
acme: fix pebble subprocess output data race</li>
<li><a
href="c247dead11"><code>c247dea</code></a>
x509roots/fallback: store bundle certs directly in DER</li>
<li><a
href="1fda73153f"><code>1fda731</code></a>
acme: increase pebble test waitForServer attempts</li>
<li><a
href="1b4c3d2e8c"><code>1b4c3d2</code></a>
x509roots/fallback: update bundle</li>
<li><a
href="b903b535d3"><code>b903b53</code></a>
acme: capture pebble test subprocess stdout/stderr</li>
<li><a
href="459a9db11b"><code>459a9db</code></a>
go.mod: update golang.org/x dependencies</li>
<li><a
href="74e709ad8a"><code>74e709a</code></a>
ssh: add AlgorithmNegotiationError</li>
<li><a
href="b3790b8d91"><code>b3790b8</code></a>
acme: fix TLSALPN01ChallengeCert for IP address identifiers</li>
<li><a
href="1dc4269656"><code>1dc4269</code></a>
acme: add Pebble integration testing</li>
<li>Additional commits viewable in <a
href="https://github.com/golang/crypto/compare/v0.37.0...v0.41.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `golang.org/x/crypto` from 0.37.0 to 0.41.0
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ef5341b706"><code>ef5341b</code></a>
go.mod: update golang.org/x dependencies</li>
<li><a
href="b999374650"><code>b999374</code></a>
acme: fix pebble subprocess output data race</li>
<li><a
href="c247dead11"><code>c247dea</code></a>
x509roots/fallback: store bundle certs directly in DER</li>
<li><a
href="1fda73153f"><code>1fda731</code></a>
acme: increase pebble test waitForServer attempts</li>
<li><a
href="1b4c3d2e8c"><code>1b4c3d2</code></a>
x509roots/fallback: update bundle</li>
<li><a
href="b903b535d3"><code>b903b53</code></a>
acme: capture pebble test subprocess stdout/stderr</li>
<li><a
href="459a9db11b"><code>459a9db</code></a>
go.mod: update golang.org/x dependencies</li>
<li><a
href="74e709ad8a"><code>74e709a</code></a>
ssh: add AlgorithmNegotiationError</li>
<li><a
href="b3790b8d91"><code>b3790b8</code></a>
acme: fix TLSALPN01ChallengeCert for IP address identifiers</li>
<li><a
href="1dc4269656"><code>1dc4269</code></a>
acme: add Pebble integration testing</li>
<li>Additional commits viewable in <a
href="https://github.com/golang/crypto/compare/v0.37.0...v0.41.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `github.com/cloudflare/circl` from 1.3.7 to 1.6.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/cloudflare/circl/releases">github.com/cloudflare/circl's
releases</a>.</em></p>
<blockquote>
<h2>CIRCL v1.6.1</h2>
<ul>
<li>Fixes some point checks on the FourQ curve.</li>
<li>Hybrid KEM fails on low-order points.</li>
</ul>
<h3>What's Changed</h3>
<ul>
<li>kem/hybrid: ensure X25519 hybrids fails with low order points by <a
href="https://github.com/Lekensteyn"><code>@​Lekensteyn</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/541">cloudflare/circl#541</a></li>
<li>.github: Use native ARM64 builders instead of QEMU by <a
href="https://github.com/Lekensteyn"><code>@​Lekensteyn</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/542">cloudflare/circl#542</a></li>
<li>Fixes several errors on twisted Edwards curves. by <a
href="https://github.com/armfazh"><code>@​armfazh</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/545">cloudflare/circl#545</a></li>
<li>Release v1.6.1 by <a
href="https://github.com/armfazh"><code>@​armfazh</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/546">cloudflare/circl#546</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/cloudflare/circl/compare/v1.6.0...v1.6.1">https://github.com/cloudflare/circl/compare/v1.6.0...v1.6.1</a></p>
<h2>CIRCL v1.6.0</h2>
<h3>New!</h3>
<ul>
<li><a
href="https://github.com/cloudflare/circl/blob/main/vdaf/prio3">Prio3</a>
Verifiable Distributed Aggregation Function (<a
href="https://datatracker.ietf.org/doc/draft-irtf-cfrg-vdaf/">draft-irtf-cfrg-vdaf</a>).</li>
<li><a
href="https://github.com/cloudflare/circl/blob/main/kem/xwing">X-Wing</a>:
general-purpose hybrid post-quantum KEM (<a
href="https://datatracker.ietf.org/doc/draft-connolly-cfrg-xwing-kem/">draft-connolly-cfrg-xwing-kem</a>)</li>
</ul>
<h3>What's Changed</h3>
<ul>
<li>Add OIDs to ML-DSA by <a
href="https://github.com/bwesterb"><code>@​bwesterb</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/519">cloudflare/circl#519</a></li>
<li>Adds Prio3 a set of verifiable distributed aggregation functions. by
<a href="https://github.com/armfazh"><code>@​armfazh</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/522">cloudflare/circl#522</a></li>
<li>Run semgrep cronjob only in upstream repository. by <a
href="https://github.com/armfazh"><code>@​armfazh</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/526">cloudflare/circl#526</a></li>
<li>X-Wing PQ/T hybrid by <a
href="https://github.com/bwesterb"><code>@​bwesterb</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/471">cloudflare/circl#471</a></li>
<li>ckem: move crypto/elliptic to crypto/ecdh by <a
href="https://github.com/MingLLuo"><code>@​MingLLuo</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/529">cloudflare/circl#529</a></li>
<li>hpke: Update HPKE code to use ecdh stdlib package. by <a
href="https://github.com/armfazh"><code>@​armfazh</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/530">cloudflare/circl#530</a></li>
<li>prio3: Adds polynomial multiplication using NTT by <a
href="https://github.com/armfazh"><code>@​armfazh</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/532">cloudflare/circl#532</a></li>
<li>Add Prio3 in readme. by <a
href="https://github.com/armfazh"><code>@​armfazh</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/527">cloudflare/circl#527</a></li>
</ul>
<h3>New Contributors</h3>
<ul>
<li><a href="https://github.com/MingLLuo"><code>@​MingLLuo</code></a>
made their first contribution in <a
href="https://redirect.github.com/cloudflare/circl/pull/529">cloudflare/circl#529</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/cloudflare/circl/compare/v1.5.0...v1.6.0">https://github.com/cloudflare/circl/compare/v1.5.0...v1.6.0</a></p>
<h1>CIRCL v1.5.0</h1>
<p><strong>New:</strong> ML-DSA, Module-Lattice-based Digital Signature
Algorithm.</p>
<h3>What's Changed</h3>
<ul>
<li>kem: add X25519MLKEM768 TLS hybrid KEM by <a
href="https://github.com/bwesterb"><code>@​bwesterb</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/510">cloudflare/circl#510</a></li>
<li>Create semgrep.yml by <a
href="https://github.com/hrushikeshdeshpande"><code>@​hrushikeshdeshpande</code></a>
in <a
href="https://redirect.github.com/cloudflare/circl/pull/514">cloudflare/circl#514</a></li>
<li>repo: Some fixes reported by CodeQL by <a
href="https://github.com/armfazh"><code>@​armfazh</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/515">cloudflare/circl#515</a></li>
<li>Add ML-DSA (FIPS204) by <a
href="https://github.com/bwesterb"><code>@​bwesterb</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/480">cloudflare/circl#480</a></li>
<li>sign/mldsa: Add test for ML-DSA signature verification. by <a
href="https://github.com/armfazh"><code>@​armfazh</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/517">cloudflare/circl#517</a></li>
<li>Release v1.5.0 by <a
href="https://github.com/armfazh"><code>@​armfazh</code></a> in <a
href="https://redirect.github.com/cloudflare/circl/pull/518">cloudflare/circl#518</a></li>
</ul>
<h3>New Contributors</h3>
<ul>
<li><a
href="https://github.com/hrushikeshdeshpande"><code>@​hrushikeshdeshpande</code></a>
made their first contribution in <a
href="https://redirect.github.com/cloudflare/circl/pull/514">cloudflare/circl#514</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/cloudflare/circl/compare/v1.4.0...v1.5.0">https://github.com/cloudflare/circl/compare/v1.4.0...v1.5.0</a></p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c6d33e3523"><code>c6d33e3</code></a>
Release v1.6.1</li>
<li><a
href="0c3868ef6f"><code>0c3868e</code></a>
curve4q: Shared must fail with low order points.</li>
<li><a
href="9fd570dd50"><code>9fd570d</code></a>
curve4q: Test showing DH does not fails on identity point.</li>
<li><a
href="c988ceba82"><code>c988ceb</code></a>
fourq: Correctly unmarshalling point.</li>
<li><a
href="ef2611dcde"><code>ef2611d</code></a>
fourq: Test showing point unmarshal fails.</li>
<li><a
href="05eba44d1a"><code>05eba44</code></a>
fourq: Handle the case of Z=0 for IsOnCurve and IsEqual.</li>
<li><a
href="eef08780cc"><code>eef0878</code></a>
fourq: Test showing isEqual and IsOnCurve fail.</li>
<li><a
href="2298474ef6"><code>2298474</code></a>
goldilocks; Handling points with z=0.</li>
<li><a
href="5a940a1115"><code>5a940a1</code></a>
goldilocks: Test for IsEqual must fail with Z=0</li>
<li><a
href="48c3b6a274"><code>48c3b6a</code></a>
ed25519: Fix isEqual to handle points with Z=0.</li>
<li>Additional commits viewable in <a
href="https://github.com/cloudflare/circl/compare/v1.3.7...v1.6.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `github.com/go-git/go-git/v5` from 5.13.1 to 5.16.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/go-git/go-git/releases">github.com/go-git/go-git/v5's
releases</a>.</em></p>
<blockquote>
<h2>v5.16.2</h2>
<h2>What's Changed</h2>
<ul>
<li>utils: fix diff so subpaths work for sparse checkouts, fixes 1455 to
releases/v5.x by <a
href="https://github.com/kane8n"><code>@​kane8n</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1567">go-git/go-git#1567</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/go-git/go-git/compare/v5.16.1...v5.16.2">https://github.com/go-git/go-git/compare/v5.16.1...v5.16.2</a></p>
<h2>v5.16.1</h2>
<h2>What's Changed</h2>
<ul>
<li>utils: merkletrie, Fix diff on sparse-checkout index. Fixes <a
href="https://redirect.github.com/go-git/go-git/issues/1406">#1406</a>
to releases/v5.x by <a
href="https://github.com/kane8n"><code>@​kane8n</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1561">go-git/go-git#1561</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/kane8n"><code>@​kane8n</code></a> made
their first contribution in <a
href="https://redirect.github.com/go-git/go-git/pull/1561">go-git/go-git#1561</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/go-git/go-git/compare/v5.16.0...v5.16.1">https://github.com/go-git/go-git/compare/v5.16.0...v5.16.1</a></p>
<h2>v5.16.0</h2>
<h2>What's Changed</h2>
<ul>
<li>[v5] plumbing: support mTLS for HTTPS protocol by <a
href="https://github.com/hiddeco"><code>@​hiddeco</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1510">go-git/go-git#1510</a></li>
<li>v5: plumbing: transport, Reintroduce SetHostKeyCallback. Fix <a
href="https://redirect.github.com/go-git/go-git/issues/1514">#1514</a>
by <a href="https://github.com/pjbgf"><code>@​pjbgf</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1515">go-git/go-git#1515</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/go-git/go-git/compare/v5.15.0...v5.16.0">https://github.com/go-git/go-git/compare/v5.15.0...v5.16.0</a></p>
<h2>v5.15.0</h2>
<h2>What's Changed</h2>
<ul>
<li>plumbing: add cert auth support to <code>releases/v5.x</code> by <a
href="https://github.com/Javier-varez"><code>@​Javier-varez</code></a>
in <a
href="https://redirect.github.com/go-git/go-git/pull/1482">go-git/go-git#1482</a></li>
<li>v5: Bump dependencies by <a
href="https://github.com/pjbgf"><code>@​pjbgf</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1505">go-git/go-git#1505</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/go-git/go-git/compare/v5.14.0...v5.15.0">https://github.com/go-git/go-git/compare/v5.14.0...v5.15.0</a></p>
<h2>v5.14.0</h2>
<h2>What's Changed</h2>
<ul>
<li>v5: Bump Go and dependencies to mitigate <a
href="https://pkg.go.dev/vuln/GO-2025-3487">GO-2025-3487</a> by <a
href="https://github.com/pjbgf"><code>@​pjbgf</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1436">go-git/go-git#1436</a></li>
</ul>
<p>⚠️ Note that this version requires Go 1.23, due to the bump to
<code>golang.org/x/crypto@v0.35.0</code> which mitigates the CVE above.
User's that can't bump to Go 1.23 will need to remain on the previous
v5.13.x release.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/go-git/go-git/compare/v5.13.2...v5.14.0">https://github.com/go-git/go-git/compare/v5.13.2...v5.14.0</a></p>
<h2>v5.13.2</h2>
<h2>What's Changed</h2>
<ul>
<li>plumbing: use the correct user agent string. Fixes <a
href="https://redirect.github.com/go-git/go-git/issues/883">#883</a> by
<a href="https://github.com/uragirii"><code>@​uragirii</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1364">go-git/go-git#1364</a></li>
<li>build: bump golang.org/x/sys from 0.28.0 to 0.29.0 in the golang-org
group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1365">go-git/go-git#1365</a></li>
<li>build: bump the golang-org group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1367">go-git/go-git#1367</a></li>
<li>build: bump github.com/ProtonMail/go-crypto from 1.1.3 to 1.1.4 by
<a href="https://github.com/dependabot"><code>@​dependabot</code></a> in
<a
href="https://redirect.github.com/go-git/go-git/pull/1368">go-git/go-git#1368</a></li>
<li>build: bump github.com/go-git/go-billy/v5 from 5.6.1 to 5.6.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1378">go-git/go-git#1378</a></li>
<li>build: bump github/codeql-action from 3.28.0 to 3.28.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1376">go-git/go-git#1376</a></li>
<li>build: bump github.com/elazarl/goproxy from 1.2.3 to 1.4.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1377">go-git/go-git#1377</a></li>
<li>git: worktree, fix restoring dot slash files (backported to v5).
Fixes <a
href="https://redirect.github.com/go-git/go-git/issues/1176">#1176</a>
by <a href="https://github.com/BeChris"><code>@​BeChris</code></a> in <a
href="https://redirect.github.com/go-git/go-git/pull/1361">go-git/go-git#1361</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ed8216c4a2"><code>ed8216c</code></a>
Merge pull request <a
href="https://redirect.github.com/go-git/go-git/issues/1567">#1567</a>
from kane8n/backport-to-v5-patricsss/fix-1455</li>
<li><a
href="4f35ebab20"><code>4f35eba</code></a>
Merge pull request <a
href="https://redirect.github.com/go-git/go-git/issues/1484">#1484</a>
from patricsss/patricsss/fix-1455</li>
<li><a
href="fd1a836882"><code>fd1a836</code></a>
Merge pull request <a
href="https://redirect.github.com/go-git/go-git/issues/1561">#1561</a>
from kane8n/backport-to-v5-fix-sparse-checkout-status</li>
<li><a
href="c3c841090f"><code>c3c8410</code></a>
Merge pull request <a
href="https://redirect.github.com/go-git/go-git/issues/1492">#1492</a>
from onee-only/fix-sparse-checkout-status</li>
<li><a
href="6d4a5c6123"><code>6d4a5c6</code></a>
Merge pull request <a
href="https://redirect.github.com/go-git/go-git/issues/1515">#1515</a>
from pjbgf/regre</li>
<li><a
href="beedd6bc18"><code>beedd6b</code></a>
plumbing: transport, Reintroduce SetHostKeyCallback. Fix <a
href="https://redirect.github.com/go-git/go-git/issues/1514">#1514</a></li>
<li><a
href="763ce2e08a"><code>763ce2e</code></a>
Merge pull request <a
href="https://redirect.github.com/go-git/go-git/issues/1510">#1510</a>
from hiddeco/mtls-support</li>
<li><a
href="5320e1b6b4"><code>5320e1b</code></a>
plumbing: surface transport configuration errors</li>
<li><a
href="9bbc93b719"><code>9bbc93b</code></a>
plumbing: fix unintended pointer mutation in test</li>
<li><a
href="f3783f4abf"><code>f3783f4</code></a>
plumbing: support mTLS for HTTPS protocol</li>
<li>Additional commits viewable in <a
href="https://github.com/go-git/go-git/compare/v5.13.1...v5.16.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `golang.org/x/crypto` from 0.37.0 to 0.41.0
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ef5341b706"><code>ef5341b</code></a>
go.mod: update golang.org/x dependencies</li>
<li><a
href="b999374650"><code>b999374</code></a>
acme: fix pebble subprocess output data race</li>
<li><a
href="c247dead11"><code>c247dea</code></a>
x509roots/fallback: store bundle certs directly in DER</li>
<li><a
href="1fda73153f"><code>1fda731</code></a>
acme: increase pebble test waitForServer attempts</li>
<li><a
href="1b4c3d2e8c"><code>1b4c3d2</code></a>
x509roots/fallback: update bundle</li>
<li><a
href="b903b535d3"><code>b903b53</code></a>
acme: capture pebble test subprocess stdout/stderr</li>
<li><a
href="459a9db11b"><code>459a9db</code></a>
go.mod: update golang.org/x dependencies</li>
<li><a
href="74e709ad8a"><code>74e709a</code></a>
ssh: add AlgorithmNegotiationError</li>
<li><a
href="b3790b8d91"><code>b3790b8</code></a>
acme: fix TLSALPN01ChallengeCert for IP address identifiers</li>
<li><a
href="1dc4269656"><code>1dc4269</code></a>
acme: add Pebble integration testing</li>
<li>Additional commits viewable in <a
href="https://github.com/golang/crypto/compare/v0.37.0...v0.41.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `google.golang.org/grpc` from 1.67.1 to 1.74.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/grpc/grpc-go/releases">google.golang.org/grpc's
releases</a>.</em></p>
<blockquote>
<h2>Release 1.74.2</h2>
<h1>New Features</h1>
<ul>
<li>grpc: introduce new <code>DialOptions</code> and
<code>ServerOptions</code> (<code>WithStaticStreamWindowSize</code>,
<code>WithStaticConnWindowSize</code>,
<code>StaticStreamWindowSize</code>, <code>StaticConnWindowSize</code>)
that force fixed window sizes for all HTTP/2 connections. By default,
gRPC uses dynamic sizing of these windows based upon a BDP estimation
algorithm. The existing options (<code>WithInitialWindowSize</code>,
etc) also disable BDP estimation, but this behavior will be changed in a
following release. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8283">#8283</a>)</li>
</ul>
<h1>API Changes</h1>
<ul>
<li>balancer: add <code>ExitIdle</code> method to <code>Balancer</code>
interface. Earlier, implementing this method was optional. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8367">#8367</a>)</li>
</ul>
<h1>Behavior Changes</h1>
<ul>
<li>xds: Remove the <code>GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUEST</code>
environment variable that allows disabling the least request balancer
with xDS. Least request was made available by default with xDS in
v1.72.0. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8248">#8248</a>)
<ul>
<li>Special Thanks: <a
href="https://github.com/atollena"><code>@​atollena</code></a></li>
</ul>
</li>
<li>server: allow 0s grpc-timeout header values, which older gRPC-Java
versions could send. This restores the behavior of grpc-go before
v1.73.0. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8439">#8439</a>)</li>
</ul>
<h1>Bug Fixes</h1>
<ul>
<li>googledirectpath: avoid logging the error message <code>Attempt to
set a bootstrap configuration...</code> when creating multiple
directpath channels. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8419">#8419</a>)</li>
</ul>
<h1>Performance Improvements</h1>
<ul>
<li>transport: reduce heap allocations by pooling objects and avoiding
method-to-closure conversions. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8361">#8361</a>)</li>
<li>transport: reduce heap allocations by re-using
<code>mem.Reader</code> objects. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8360">#8360</a>)</li>
</ul>
<h1>Documentation</h1>
<ul>
<li>examples: add examples to demonstrate enabling experimental metrics
using the OpenTelemetry plugin. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8388">#8388</a>)
<ul>
<li>Special Thanks: <a
href="https://github.com/vinothkumarr227"><code>@​vinothkumarr227</code></a></li>
</ul>
</li>
</ul>
<h2>Release 1.74.1</h2>
<p>Version 1.74.1 retracts release v1.74.0 and itself. Release 1.74.0
was accidentally tagged on the wrong commit and should not be used.
Version 1.73.0 should be used until 1.74.2 is released.</p>
<p>Release 1.74.0 was accidentally tagged on the wrong commit and should
not be used. Version 1.73.0 should be used until 1.74.1 is released.</p>
<h2>Release 1.73.0</h2>
<h1>New Features</h1>
<ul>
<li>balancer/ringhash: move LB policy from xds/internal to exported path
to facilitate use without xds (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8249">#8249</a>)</li>
<li>xds: enable least request LB policy by default. It can be disabled
by setting <code>GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUEST=false</code> in
your environment. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8253">#8253</a>)</li>
<li>grpc: add a <code>CallAuthority</code> Call Option that can be used
to overwrite the http <code>:authority</code> header on per-RPC basis.
(<a
href="https://redirect.github.com/grpc/grpc-go/issues/8068">#8068</a>)</li>
<li>stats/opentelemetry: add trace event for name resolution delay. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8074">#8074</a>)</li>
<li>health: added <code>List</code> method to gRPC Health service. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8155">#8155</a>)
<ul>
<li>Special Thanks: <a
href="https://github.com/marcoshuck"><code>@​marcoshuck</code></a></li>
</ul>
</li>
<li>ringhash: implement features from gRFC A76. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8159">#8159</a>)</li>
<li>xds: add functionality to support SPIFFE Bundle Maps as roots of
trust in XDS which can be enabled by setting
<code>GRPC_EXPERIMENTAL_XDS_MTLS_SPIFFE=true</code>. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8167">#8167</a>,
<a
href="https://redirect.github.com/grpc/grpc-go/issues/8180">#8180</a>,
<a
href="https://redirect.github.com/grpc/grpc-go/issues/8229">#8229</a>,
<a
href="https://redirect.github.com/grpc/grpc-go/issues/8343">#8343</a>)</li>
</ul>
<h1>Bug Fixes</h1>
<ul>
<li>xds: locality ID metric label is changed to make it consistent with
<a
href="https://github.com/grpc/proposal/blob/master/A78-grpc-metrics-wrr-pf-xds.md#optional-xds-locality-label">gRFC
A78</a>. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8256">#8256</a>)</li>
<li>client: fail RPCs on the client when using extremely short contexts
that expire before the <code>grpc-timeout</code> header is created. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8312">#8312</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e9e00cb28e"><code>e9e00cb</code></a>
Change version to 1.74.2 (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8470">#8470</a>)</li>
<li><a
href="bd7cb0a95b"><code>bd7cb0a</code></a>
Change version to 1.74.2-dev (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8461">#8461</a>)</li>
<li><a
href="002a22c03e"><code>002a22c</code></a>
Change version to 1.74.1 (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8455">#8455</a>)</li>
<li><a
href="6e8e7e48d1"><code>6e8e7e4</code></a>
Retract v1.74.0 and v1.74.1 (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8457">#8457</a>)</li>
<li><a
href="48c9e4d1ee"><code>48c9e4d</code></a>
Change version to 1.74.1-dev (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8408">#8408</a>)</li>
<li><a
href="b8b6cffbb2"><code>b8b6cff</code></a>
Change version to 1.74.0 (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8407">#8407</a>)</li>
<li><a
href="077e2c37bd"><code>077e2c3</code></a>
Cherry-pick <a
href="https://redirect.github.com/grpc/grpc-go/issues/8411">#8411</a>,
<a
href="https://redirect.github.com/grpc/grpc-go/issues/8419">#8419</a>,
<a
href="https://redirect.github.com/grpc/grpc-go/issues/8422">#8422</a>,
<a href="https://redirect.github.com/grpc/grpc-go/issues/8445">#8445</a>
and <a
href="https://redirect.github.com/grpc/grpc-go/issues/8451">#8451</a> to
v1.74.x (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8454">#8454</a>)</li>
<li><a
href="b34f845d70"><code>b34f845</code></a>
server: allow 0s grpc-timeout header values, as java is known to be able
to s...</li>
<li><a
href="1787f94275"><code>1787f94</code></a>
xdsclient: export genericResourceTypeDecoder (<a
href="https://redirect.github.com/grpc/grpc-go/issues/8406">#8406</a>)</li>
<li><a
href="15299ccca3"><code>15299cc</code></a>
xdsclient: make a function to return the supported resource type
implementati...</li>
<li>Additional commits viewable in <a
href="https://github.com/grpc/grpc-go/compare/v1.67.1...v1.74.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `google.golang.org/protobuf` from 1.36.6 to 1.36.7


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/modelcontextprotocol/registry/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-13 14:00:18 +01:00
Andrey Velichkevich
35bd41a131
fix(ci): Fix dev-local target in the Makefile (#259)
<!-- Provide a brief summary of your changes -->
Hi Folks, thanks for the great work on MCP Registry!

While running it locally, I noticed a bug with the `make dev-local`
command.
```
$ make dev-local

go run ./cmd/registry/main.go
# command-line-arguments
cmd/registry/main.go:29:36: undefined: Version
cmd/registry/main.go:30:34: undefined: GitCommit
``` 

## Motivation and Context
<!-- Why is this change needed? What problem does it solve? -->

Command for running MCP Registry locally is broken.

## How Has This Been Tested?
<!-- Have you tested this in a real application? Which scenarios were
tested? -->

## Breaking Changes
<!-- Will users need to update their code or configurations? -->

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [x] I have added appropriate error handling
- [x] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->

cc @domdomegg  @sridharavinash @tadasant

Signed-off-by: Andrey Velichkevich <andrey.velichkevich@gmail.com>
Co-authored-by: adam jones <adamj+git@anthropic.com>
2025-08-13 10:25:44 +00:00
adam jones
ff3edee794
infra/ci: Add GitHub Actions workflow for staging and production deployment (#256)
## Motivation and Context

- Enable all contributors to manage the infrastructure
- Enable deployments without error-prone manual intervention

## How Has This Been Tested?

Tested by deploying from this test branch, getting CI green and seeing
changes were applied

## Breaking Changes
<!-- Will users need to update their code or configurations? -->

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [x] I have added appropriate error handling
- [ ] I have added or updated documentation as needed
2025-08-13 11:03:10 +01:00
dependabot[bot]
1b8f7a674d
chore(deps): bump google.golang.org/grpc from 1.51.0 to 1.56.3 (#252)
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from
1.51.0 to 1.56.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/grpc/grpc-go/releases">google.golang.org/grpc's
releases</a>.</em></p>
<blockquote>
<h2>Release 1.56.3</h2>
<h1>Security</h1>
<ul>
<li>
<p>server: prohibit more than MaxConcurrentStreams handlers from running
at once (CVE-2023-44487)</p>
<p>In addition to this change, applications should ensure they do not
leave running tasks behind related to the RPC before returning from
method handlers, or should enforce appropriate limits on any such
work.</p>
</li>
</ul>
<h2>Release 1.56.2</h2>
<ul>
<li>status: To fix a panic, <code>status.FromError</code> now returns an
error with <code>codes.Unknown</code> when the error implements the
<code>GRPCStatus()</code> method, and calling <code>GRPCStatus()</code>
returns <code>nil</code>. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6374">#6374</a>)</li>
</ul>
<h2>Release 1.56.1</h2>
<ul>
<li>client: handle empty address lists correctly in
addrConn.updateAddrs</li>
</ul>
<h2>Release 1.56.0</h2>
<h1>New Features</h1>
<ul>
<li>client: support channel idleness using <code>WithIdleTimeout</code>
dial option (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6263">#6263</a>)
<ul>
<li>This feature is currently disabled by default, but will be enabled
with a 30 minute default in the future.</li>
</ul>
</li>
<li>client: when using pickfirst, keep channel state in
TRANSIENT_FAILURE until it becomes READY (<a
href="https://github.com/grpc/proposal/blob/master/A62-pick-first.md">gRFC
A62</a>) (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6306">#6306</a>)</li>
<li>xds: Add support for Custom LB Policies (<a
href="https://github.com/grpc/proposal/blob/master/A52-xds-custom-lb-policies.md">gRFC
A52</a>) (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6224">#6224</a>)</li>
<li>xds: support pick_first Custom LB policy (<a
href="https://github.com/grpc/proposal/blob/master/A62-pick-first.md">gRFC
A62</a>) (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6314">#6314</a>)
(<a
href="https://redirect.github.com/grpc/grpc-go/issues/6317">#6317</a>)</li>
<li>client: add support for pickfirst address shuffling (<a
href="https://github.com/grpc/proposal/blob/master/A62-pick-first.md">gRFC
A62</a>) (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6311">#6311</a>)</li>
<li>xds: Add support for String Matcher Header Matcher in RDS (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6313">#6313</a>)</li>
<li>xds/outlierdetection: Add Channelz Logger to Outlier Detection LB
(<a
href="https://redirect.github.com/grpc/grpc-go/issues/6145">#6145</a>)
<ul>
<li>Special Thanks: <a
href="https://github.com/s-matyukevich"><code>@​s-matyukevich</code></a></li>
</ul>
</li>
<li>xds: enable RLS in xDS by default (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6343">#6343</a>)</li>
<li>orca: add support for application_utilization field and missing
range checks on several metrics setters</li>
<li>balancer/weightedroundrobin: add new LB policy for balancing between
backends based on their load reports (<a
href="https://github.com/grpc/proposal/blob/master/A58-client-side-weighted-round-robin-lb-policy.md">gRFC
A58</a>) (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6241">#6241</a>)</li>
<li>authz: add conversion of json to RBAC Audit Logging config (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6192">#6192</a>)</li>
<li>authz: add support for stdout logger (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6230">#6230</a>
and <a
href="https://redirect.github.com/grpc/grpc-go/issues/6298">#6298</a>)</li>
<li>authz: support customizable audit functionality for authorization
policy (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6192">#6192</a> <a
href="https://redirect.github.com/grpc/grpc-go/issues/6230">#6230</a> <a
href="https://redirect.github.com/grpc/grpc-go/issues/6298">#6298</a> <a
href="https://redirect.github.com/grpc/grpc-go/issues/6158">#6158</a> <a
href="https://redirect.github.com/grpc/grpc-go/issues/6304">#6304</a>
and <a
href="https://redirect.github.com/grpc/grpc-go/issues/6225">#6225</a>)</li>
</ul>
<h1>Bug Fixes</h1>
<ul>
<li>orca: fix a race at startup of out-of-band metric subscriptions that
would cause the report interval to request 0 (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6245">#6245</a>)</li>
<li>xds/xdsresource: Fix Outlier Detection Config Handling and correctly
set xDS Defaults (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6361">#6361</a>)</li>
<li>xds/outlierdetection: Fix Outlier Detection Config Handling by
setting defaults in ParseConfig() (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6361">#6361</a>)</li>
</ul>
<h1>API Changes</h1>
<ul>
<li>orca: allow a ServerMetricsProvider to be passed to the ORCA service
and ServerOption (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6223">#6223</a>)</li>
</ul>
<h2>Release 1.55.1</h2>
<ul>
<li>status: To fix a panic, <code>status.FromError</code> now returns an
error with <code>codes.Unknown</code> when the error implements the
<code>GRPCStatus()</code> method, and calling <code>GRPCStatus()</code>
returns <code>nil</code>. (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6374">#6374</a>)</li>
</ul>
<h2>Release 1.55.0</h2>
<h1>Behavior Changes</h1>
<ul>
<li>xds: enable federation support by default (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6151">#6151</a>)</li>
<li>status: <code>status.Code</code> and <code>status.FromError</code>
handle wrapped errors (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6031">#6031</a>
and <a
href="https://redirect.github.com/grpc/grpc-go/issues/6150">#6150</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1055b481ed"><code>1055b48</code></a>
Update version.go to 1.56.3 (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6713">#6713</a>)</li>
<li><a
href="5efd7bd73e"><code>5efd7bd</code></a>
server: prohibit more than MaxConcurrentStreams handlers from running at
once...</li>
<li><a
href="bd1f038e72"><code>bd1f038</code></a>
Upgrade version.go to 1.56.3-dev (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6434">#6434</a>)</li>
<li><a
href="faab8736bf"><code>faab873</code></a>
Update version.go to v1.56.2 (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6432">#6432</a>)</li>
<li><a
href="6b0b291d79"><code>6b0b291</code></a>
status: fix panic when servers return a wrapped error with status OK (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6374">#6374</a>)
...</li>
<li><a
href="ed56401aa5"><code>ed56401</code></a>
[PSM interop] Don't fail target if sub-target already failed (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6390">#6390</a>)
(<a
href="https://redirect.github.com/grpc/grpc-go/issues/6405">#6405</a>)</li>
<li><a
href="cd6a794f0b"><code>cd6a794</code></a>
Update version.go to v1.56.2-dev (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6387">#6387</a>)</li>
<li><a
href="5b67e5ea44"><code>5b67e5e</code></a>
Update version.go to v1.56.1 (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6386">#6386</a>)</li>
<li><a
href="d0f5150384"><code>d0f5150</code></a>
client: handle empty address lists correctly in addrConn.updateAddrs (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6354">#6354</a>)
...</li>
<li><a
href="997c1ea101"><code>997c1ea</code></a>
Change version to 1.56.1-dev (<a
href="https://redirect.github.com/grpc/grpc-go/issues/6345">#6345</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/grpc/grpc-go/compare/v1.51.0...v1.56.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google.golang.org/grpc&package-manager=go_modules&previous-version=1.51.0&new-version=1.56.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/modelcontextprotocol/registry/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: adam jones <adamj+git@anthropic.com>
2025-08-12 20:25:52 +01:00
dependabot[bot]
5e8ca2cf06
chore(deps): bump google.golang.org/protobuf from 1.27.1 to 1.33.0 (#253)
Bumps google.golang.org/protobuf from 1.27.1 to 1.33.0.


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google.golang.org/protobuf&package-manager=go_modules&previous-version=1.27.1&new-version=1.33.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/modelcontextprotocol/registry/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: adam jones <adamj+git@anthropic.com>
2025-08-12 20:25:29 +01:00
dependabot[bot]
57cc71957f
chore(deps): bump github.com/golang/glog from 0.0.0-20160126235308-23def4e6c14b to 1.2.4 (#254)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [github.com/golang/glog](https://github.com/golang/glog) from
0.0.0-20160126235308-23def4e6c14b to 1.2.4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/golang/glog/releases">github.com/golang/glog's
releases</a>.</em></p>
<blockquote>
<h2>v1.2.4</h2>
<h2>What's Changed</h2>
<ul>
<li>Fail if log file already exists by <a
href="https://github.com/chressie"><code>@​chressie</code></a> in <a
href="https://redirect.github.com/golang/glog/pull/74">golang/glog#74</a>:
<ul>
<li>glog: Don't try to create/rotate a given syncBuffer twice in the
same second</li>
<li>glog: introduce createInDir function as in internal version</li>
<li>glog: have createInDir fail if the file already exists</li>
</ul>
</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/golang/glog/compare/v1.2.3...v1.2.4">https://github.com/golang/glog/compare/v1.2.3...v1.2.4</a></p>
<h2>v1.2.3</h2>
<h2>What's Changed</h2>
<ul>
<li>glog: check that stderr is valid before using it by default by <a
href="https://github.com/chressie"><code>@​chressie</code></a> in <a
href="https://redirect.github.com/golang/glog/pull/72">golang/glog#72</a></li>
<li>glog: fix typo by <a
href="https://github.com/chressie"><code>@​chressie</code></a> in <a
href="https://redirect.github.com/golang/glog/pull/73">golang/glog#73</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/golang/glog/compare/v1.2.2...v1.2.3">https://github.com/golang/glog/compare/v1.2.2...v1.2.3</a></p>
<h2>v1.2.2</h2>
<h2>What's Changed</h2>
<ul>
<li>glog: avoid calling user.Current() on windows by <a
href="https://github.com/bentekkie"><code>@​bentekkie</code></a> in <a
href="https://redirect.github.com/golang/glog/pull/69">golang/glog#69</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/golang/glog/compare/v1.2.1...v1.2.2">https://github.com/golang/glog/compare/v1.2.1...v1.2.2</a></p>
<h2>v1.2.1</h2>
<h2>What's Changed</h2>
<ul>
<li>glog: don't hold mutex when sync'ing by <a
href="https://github.com/chressie"><code>@​chressie</code></a> in <a
href="https://redirect.github.com/golang/glog/pull/68">golang/glog#68</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/golang/glog/compare/v1.2.0...v1.2.1">https://github.com/golang/glog/compare/v1.2.0...v1.2.1</a></p>
<h2>v1.2.0</h2>
<h2>What's Changed</h2>
<ul>
<li>glog: add context variants and logsink tests by <a
href="https://github.com/chressie"><code>@​chressie</code></a> in <a
href="https://redirect.github.com/golang/glog/pull/66">golang/glog#66</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/golang/glog/compare/v1.1.2...v1.2.0">https://github.com/golang/glog/compare/v1.1.2...v1.2.0</a></p>
<h2>v1.1.2</h2>
<p>Bugfix release.</p>
<h2>What's Changed</h2>
<ul>
<li>glog: populate symlinks -log_link directory by <a
href="https://github.com/chressie"><code>@​chressie</code></a> in <a
href="https://redirect.github.com/golang/glog/pull/64">golang/glog#64</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/golang/glog/compare/v1.1.1...v1.1.2">https://github.com/golang/glog/compare/v1.1.1...v1.1.2</a></p>
<h2>v1.1.1</h2>
<p>Bugfixes since the larger v1.1.0, which have been addressed.</p>
<h2>v1.1.0</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/golang/glog/commits/v1.2.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/golang/glog&package-manager=go_modules&previous-version=0.0.0-20160126235308-23def4e6c14b&new-version=1.2.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/modelcontextprotocol/registry/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: adam jones <adamj+git@anthropic.com>
2025-08-12 20:25:09 +01:00
adam jones
fe52766676
deploy: Deploy the registry to GCP (#255)
Adds the Pulumi code to:
- Deploy the registry (and associated services e.g. mongodb) to Google
Cloud Platform (GCP), on top of Google Kubernetes Engine (GKE)
- Sets up proper environments and secrets management
- Uses the real container image, now that it's published in #225. At the
moment attached to latest, we might want to pin the version later (or
perhaps always use `latest` in staging, and pin prod)
- Uses real domains (`staging.registry.modelcontextprotocol.io`) rather
than examples (``)

## Motivation and Context

Setting up infrastructure to deploy it. I set something up in Azure in
#227, although not super robust (e.g. no service accounts etc.). Think
we will use GCP as:
- the maintainers have experience with GCP, but none with Azure
- costs are quite low, and Anthropic is happy to cover them in the short
term
- means we only have to maintain one login system (just Google Cloud
Identity), not two (Google Workspace + Azure)

## How Has This Been Tested?

Deployed this to a staging and production cluster. Try it yourself at:

```bash
curl -H "Host: staging.registry.modelcontextprotocol.io" -k https://35.222.36.75/v0/ping
```

(will be sorting out domains very soon)

## Breaking Changes

NA - just adds support for GCP deployment

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [ ] New and existing tests pass locally
- [x] I have added appropriate error handling
- [x] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->

Expected follow-ups:
- GitHub Action setup to deploy things to the cluster from GitHub, to
avoid gatekeeping to just the people with the secrets.
2025-08-12 17:44:50 +01:00
adam jones
667e2840b8
feat(infra): Add Pulumi-based Kubernetes deployment infrastructure (#237)
Original PR: #227

- Add Pulumi-based infrastructure as code for deploying MCP Registry to
Kubernetes
- Support for both local development (minikube) and Azure Kubernetes
Service (AKS)
- Complete deployment orchestration including:
- cluster setup: e.g. you point this at an Azure account, and it can set
up and manage the cluster for you. e.g. K8s version, number of nodes,
type of nodes, ...
  - cloud agnostic K8s services: cert-manager, nginx-ingress
- app services: MongoDB, and registry application (currently using nginx
as a placeholder, blocked on #225 (as is #190). but should be a 1 line
change)

## How is this different to #190

- Supports cluster setup and management. This enables:
- Non-hosting maintainers managing many devops workflows (e.g. scaling
up the cluster, or bumping K8s versions). Without this, we'd need to
bug/page the organisation hosting the registry when we need these things
changed.
- Makes it easy to spin up things like staging/temporary clusters, as
well as enables contributors to replicate the stack exactly on their own
Azure accounts.
- Sets up cloud-agnostic services. For example, rather than using the
Azure-managed ingresses and CA, we install nginx-ingress and
cert-manager. This enables:
- Running the entire infra stack can also run locally (e.g. in minikube,
k3s, orbstack, colima) - making it much easier for contributors to test
changes to infra stuff.
- Moving between cloud providers much more easily, e.g. we could shift
from Azure to GCP/AWS/other with minimal hassle.
- Everything stays written in Go, rather than Helm templates. This means
we get things like type-checking etc. for free (which from my experience
makes AI tools wayyy better at editing K8s stuff), and contributors
don't need to learn a new language if they're already using Go.

## Testing

I've got this running well:
- locally in minikube
- on cloud in Azure (my personal Azure account)

<details><summary>Claude written architecture and security
review</summary>
<p>

## Deployment Review & Assessment

### Current Architecture Strengths
**Pulumi IaC Approach**
- Well-structured infrastructure as code using Pulumi
- Multi-provider support (AKS, local) with clean abstraction
- Good separation of concerns in `pkg/` directory

**Security Fundamentals**
- Non-root container execution (`appuser` with UID 10001)
- Secrets properly managed via Kubernetes secrets
- TLS/SSL certificate management with cert-manager and Let's Encrypt

### Critical Issues & High-Priority Improvements

**1. Production Deployment Not Ready** 🚨
The registry deployment uses `nginx:alpine` placeholder image instead of
the actual MCP registry:
- `deploy/pkg/k8s/registry.go:67` - TODO comments indicate incomplete
setup
- Health probes are commented out
- Port mapping doesn't match actual application (80 vs 8080)

**Fix:** Build and publish actual registry container image to GHCR,
update deployment

**2. Database Security Considerations** 🔒
- MongoDB deployed without authentication
- No backup/disaster recovery strategy
- Database credentials hardcoded

*Note: MongoDB is not exposed externally (ClusterIP service), so this is
not a critical security risk but should be addressed for production.*

**3. Monitoring & Observability Gaps** 📊
- No Prometheus/Grafana monitoring stack
- No log aggregation (ELK/Loki)
- No application metrics/health dashboards
- No alerting configured

**4. High Availability & Reliability** ⚠️
- Single MongoDB instance (no replication)
- No persistent volume backup strategy
- Fixed 10Gi storage without growth planning
- Only 2 replicas for registry service
- No pod disruption budgets
- No horizontal pod autoscaling

### Recommended Improvements

**Immediate (High Priority)**
1. Complete Registry Deployment - Build proper container image pipeline,
enable health checks
2. Secure MongoDB - Add authentication credentials, implement backup
strategy

**Medium Priority**
3. Add Monitoring Stack - Prometheus, Grafana deployment
4. Security Hardening (Nice to Have) - RBAC policies, Network Policies,
Pod Security Standards
5. CI/CD Pipeline Enhancement - Container image building/publishing,
automated deployment

**Lower Priority**
6. High Availability - MongoDB replica set, HPA for registry pods
7. Operational Excellence - Kubernetes dashboard, cost optimization

### Configuration Issues
- Production config has test credentials: `deploy/Pulumi.prod.yaml:4-5`
- Missing environment-specific resource sizing
- Hardcoded domain names (`example.com`)

The deployment setup shows good architectural foundations but needs
significant work before production readiness. The most critical issue is
the placeholder nginx container - priority should be completing the
actual registry application deployment before addressing the other
improvements. Security measures like RBAC and Network Policies are nice
to have but not strictly necessary given that MongoDB is not exposed
externally.

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

</p>
</details> 


## Metadata

Working towards #91

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-11 19:43:49 +01:00
adam jones
1821f68360
docs: Clean up API documentation (#236)
- Move API examples from docs into swagger.yaml
- Align openapi.yaml docs with implementation
2025-08-09 18:44:53 +01:00
adam jones
1a6dc930b3
Remove tracked binaries and fix build output directory (#248)
## Summary
- Remove registry binary from git tracking
- Update Makefile to output binaries to bin/ directory  
- Fix .gitignore to properly exclude bin/ directory and all binaries

This follows Go best practices by placing all compiled binaries in the
bin/ directory.
2025-08-08 15:34:25 +01:00
adam jones
3a0920a578
Add example .env values (#243)
Authored-by: kiliczsh <muhammeddkilicc@gmail.com>
Co-authored-by: kiliczsh <muhammeddkilicc@gmail.com>
2025-08-08 15:07:13 +01:00
adam jones
c2489ca663
Update Claude workflow configuration (#234)
## Summary
- Enable additional permissions for Claude to read CI results
- Configure Claude to trigger when assigned to issues
- Allow bash command execution for this public repository
- Add custom instructions for concise GitHub comment formatting
2025-08-08 14:27:55 +01:00
adam jones
7d2f7bf38a
Add Claude Code GitHub workflow for @claude mentions (#231)
## Summary
- Adds GitHub Actions workflow to enable Claude Code integration via
@claude mentions
- Allows team to interact with Claude directly in PR and issue comments
- Provides AI assistance for code reviews, bug fixes, documentation, and
feature implementation

## What is Claude Code?

[Claude Code](https://claude.ai/code) is an AI coding agent that can
help with:
- Bug fixes and improvements  
- Documentation updates
- Implementing new features
- Code reviews and suggestions
- Writing tests
- And more\!

## How it works

Once this PR is merged, we'll be able to interact with Claude by
mentioning @claude in a pull request or issue comment. Claude will
analyze the comment and surrounding context, and execute on the request
in a GitHub action.

## Important Notes

- **This workflow won't take effect until this PR is merged**
- **@claude mentions won't work until after the merge is complete**
- The workflow runs automatically whenever Claude is mentioned in PR or
issue comments
- Claude gets access to the entire PR or issue context including files,
diffs, and previous comments

## Security

- Our Anthropic API key is securely stored as a GitHub Actions secret
- Only users with write access to the repository can trigger the
workflow
- All Claude runs are stored in the GitHub Actions run history
- Claude's default tools are limited to reading/writing files and
interacting with our repo by creating comments, branches, and commits
- We can add more allowed tools by modifying the workflow file

## Test plan
After merging this PR:
1. Create a test issue or PR
2. Add a comment mentioning @claude with a simple request
3. Verify Claude responds and the workflow runs successfully
4. Test on both issues and pull requests

🤖 Generated with [Claude Code](https://claude.ai/code)
2025-08-08 13:44:51 +01:00
Copilot
9c49c8b9b8
Simplify seed data configuration by removing command line flags and renaming environment variable (#175)
This PR simplifies the seed data import configuration based on
maintainer feedback by removing command line flags and using a clearer
environment variable name.

## Key Changes

### Configuration Simplification
- **Renamed**: `MCP_REGISTRY_SEED_FILE_PATH` → `MCP_REGISTRY_SEED_FROM`
- **Removed**: `--seed-file-path` command line flag to eliminate
configuration complexity

### Improved User Experience
Users now configure seed data import using a single, clear environment
variable:

```bash
# Before (multiple ways to configure)
MCP_REGISTRY_SEED_FILE_PATH=data/seed.json ./registry
./registry --seed-file-path=data/seed.json

# After (simplified single method)
MCP_REGISTRY_SEED_FROM=data/seed.json ./registry
```

### Registry Composability
The composability workflow is now simplified while maintaining all
functionality:

```bash
# Start first registry with seed data
MCP_REGISTRY_SEED_FROM=data/seed.json ./registry

# Start second registry importing from first via pagination
MCP_REGISTRY_SEED_FROM=http://localhost:8080 ./registry
```

## Technical Implementation
- Maintains full backward compatibility for import functionality
- All existing seed data sources continue to work (local files, HTTP
URLs, registry URLs)
- Automatic pagination through `/v0/servers` endpoint remains unchanged
- Configurable delays between requests preserved

## Benefits
- **Reduced complexity**: Single configuration method instead of
multiple
- **Clearer naming**: `SEED_FROM` better describes the source of seed
data
- **Easier maintenance**: Fewer configuration paths to test and document
- **Consistent patterns**: Aligns with other environment-variable-only
configuration

All existing functionality is preserved while providing a cleaner, more
maintainable configuration interface.

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 Share your feedback on Copilot coding agent for the chance to win a
$200 gift card! Click
[here](https://survey.alchemer.com/s3/8343779/Copilot-Coding-agent) to
start the survey.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Avinash Sridhar <sridharavinash@users.noreply.github.com>
Co-authored-by: Toby Padilla <toby@toby.sh>
Co-authored-by: toby <83556+toby@users.noreply.github.com>
2025-08-08 13:42:16 +01:00
adam jones
f04c995f0a
Add Docker image documentation and workflow (#225)
Adds a CI action to build docker images and publish them to GHCR on
every commit. We can then use these when deploying the registry.

This turned out to be an upstream blocker of building the infra for
deployment, and something like this is needed for either deployment
approach we're exploring.

---

## Summary
- Add comprehensive documentation for pre-built Docker images in README
- Include usage examples and configuration guidance  
- Add GitHub Actions workflow for automated Docker image publishing

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

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-07 16:25:35 +01:00
adam jones
431a670f1b
Consolidate documentation and remove redundancy (#222)
## Summary

This PR consolidates our documentation to reduce redundancy and
maintenance overhead:

- Removes the CLAUDE.md file with Import statement in favor of direct
README.md usage
- Merges CONTRIBUTING.md content into README.md's Contributing section  
- Migrates useful architecture and developer information from the old
CLAUDE.md to README.md
- Eliminates duplicated information between files

## Benefits

- Single source of truth in README.md reduces documentation drift
- Easier maintenance with all docs in one place
- Claude Code remains fully functional while reducing complexity

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-06 16:05:07 +01:00
Radoslav Dimitrov
f5bf542697
Add helpful targets via Makefile (#211)
## Motivation and Context
<!-- Why is this change needed? What problem does it solve? -->
The following PR:
* Adds a Makefile with the most common project-related commands
* Updates the CI workflow to leverage that (people testing locally will
use the same commands as the CI)
* Switches to using the official Golangci-lint action instead of
downloading it via curl
* Bumps the golangci version (supersedes #144)
* Fixes any formatting/linting issues found
* Updates the README to reference the new make targets
* Runs the schema validation scripts as part of the CI

**Next:**
* If you are okay I can file a follow up PR afterwards where I can tidy
up the CI workflows a bit, it feels there's some overlap.

## How Has This Been Tested?
<!-- Have you tested this in a real application? Which scenarios were
tested? -->
Locally by running the make targets

## Breaking Changes
<!-- Will users need to update their code or configurations? -->

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [ ] I have added appropriate error handling
- [ ] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->

---------

Signed-off-by: Radoslav Dimitrov <radoslav@stacklok.com>
Co-authored-by: Adam Jones <adamj+git@anthropic.com>
2025-08-06 14:51:15 +01:00
adam jones
5acd00024f
Add redirect from root path to Swagger UI documentation (#223)
## Summary
- Added redirect from `/` to `/v0/swagger/index.html` to help
contributors quickly access API documentation
- Implemented the redirect in router.go after v0 routes registration

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

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-06 14:11:21 +01:00
云原生极度发烧友
bdda82ad3f
Configure the Dockerfile to run the application as a non-root user. (#202)
<!-- Provide a brief summary of your changes -->
run the application as a non-root user.
## Motivation and Context
<!-- Why is this change needed? What problem does it solve? -->
run the application as a non-root user.

## How Has This Been Tested?
<!-- Have you tested this in a real application? Which scenarios were
tested? -->
YES, build the docker image.

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [x] New feature (non-breaking change which adds functionality)


## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [ ] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [ ] My code follows the repository's style guidelines
- [ ] New and existing tests pass locally
- [ ] I have added appropriate error handling
- [ ] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->

Co-authored-by: hurricane1988 <niujianping_qm@dayu.work>
Co-authored-by: adam jones <domdomegg+git@gmail.com>
2025-08-06 13:01:20 +01:00
Haokun Tang
6ba612942e
feat: migrate golangci-lint from v1 to v2 (#144)
Migrate golangci-lint from v1 to v2.

## Motivation and Context
The golangci-lint has been upgraded to v2 since March 2025.
The v2 of golangci-lint has simplified the linters management.

## How Has This Been Tested?
Tested locally with golangci-lint@v2.1.6

## Breaking Changes
No.

## Types of changes
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [x] I have added appropriate error handling
- [ ] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->

---------

Co-authored-by: haokunt <haokunt@opera.com>
Co-authored-by: Avinash Sridhar <sridharavinash@users.noreply.github.com>
Co-authored-by: Adam Jones <adamj+git@anthropic.com>
2025-08-06 12:07:16 +01:00
Ashish Kumar Jain
502b628ac8
fix: resolve registry image conflict in docker-compose (#114)
Issue: links directive was failing on podman

- Removed unsupported 'links' directive for Podman compatibility

<!-- Provide a brief summary of your changes -->
It was failing on Podman because Podman doesn't support the links
directive that Docker Compose does, and we already using depends_on,
which establishes the dependency relationship between services; we can
simply remove the links section from your docker-compose.yml file.

## Motivation and Context
docker-compose -links deprecated #107
Fix the defect by removing link.

## How Has This Been Tested?
Yes. Test by running on both.
For Docker run.
docker build -t registry .
docker compose up

For Podman
podman build -t registry .
podman compose up

## Breaking Changes
Yes for podman.

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ x] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ x] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x ] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [ x] My code follows the repository's style guidelines
- [ x] New and existing tests pass locally
- [ x] I have added appropriate error handling
- [x ] I have added or updated documentation as needed

## Additional context
It is related to issue #107

Co-authored-by: Avinash Sridhar <sridharavinash@users.noreply.github.com>
Co-authored-by: adam jones <domdomegg+git@gmail.com>
2025-08-06 11:41:46 +01:00
Mingyong Chen
26b85d7158
fix: fix missing seed.json on startup by renaming file (#75)
Renamed `data/seed_2025_05_16.json` to `data/seed.json` and updated `Dockerfile`

## Motivation and Context

When cloning the repository and building the project using:

```bash
go build ./cmd/registry
.\\registry.exe
```

the application fails to start because the default seed file path
(`data/seed.json`) does not exist in the repo:

```
Failed to read seed file: failed to read file: open data/seed.json: The system cannot find the file specified.
```

## How Has This Been Tested?

```bash
go build ./cmd/registry
.\\registry.exe // ./registry
```

## Breaking Changes

None

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [ ] I have added appropriate error handling
- [ ] I have added or updated documentation as needed

Co-authored-by: Adam Jones <adamj+git@anthropic.com>
2025-08-06 11:32:13 +01:00
Radoslav Dimitrov
4f62964de3
Do not gitignore all folders and files named publisher (#215)
This PR removes the gitignore entry for `publisher` since this
means we gitignore all folders and files named `publisher`.

My assumption is the intent for this was to just ignore binaries named
`publisher` but currently that binary is going to be located at
`tools/publisher/bin/mcp-publisher` and the **/bin pattern already
ignores all bin/ directories (taken from the build.sh).

Signed-off-by: Radoslav Dimitrov <radoslav@stacklok.com>
Co-authored-by: adam jones <domdomegg+git@gmail.com>
2025-08-06 10:16:01 +00:00
疯魔慕薇
c1d7bcd081
auto build image (#147)
Auto build image when we run `docker compose up`, Make it start more
easy for beginner.

## Motivation and Context
When I try to use `docker compose up` start the MCP server, docker
default pull `registry` image from dockerhub, because I forget build
image first.

Maybe we don't need to manually build the image, just build it
automatically when docker compose starts

## How Has This Been Tested?
Just run `docker-compose up --build` at a environment has installed
docker and docker compose.

Signed-off-by: 疯魔慕薇 <kfanjian@gmail.com>
Co-authored-by: adam jones <domdomegg+git@gmail.com>
2025-08-06 11:08:56 +01:00
Radoslav Dimitrov
d461400055
Add a status field indicating if a server is deprecated or active (#210)
The following PR adds a new server `status` field to support the status
of servers, like deprecated or active

Details:
* Add status field to server.json schema with 'active' and 'deprecated'
values
* Update OpenAPI spec to include status field in Server responses
* Add ServerStatus enum and field to Go model structs
* Update examples to demonstrate status field usage (`active` and
`deprecated`)

Since this is my first PR there's a good chance I might have missed
something so I'll appreciate any feedback to make this and any PRs in
the future easier for you to review 😃

Fixes: #181

## Motivation and Context
<!-- Why is this change needed? What problem does it solve? -->
The main goal is to have a way for server authors to notify registry
consumers that a server may no longer be maintained and shouldn't be
considered for using.

## How Has This Been Tested?
<!-- Have you tested this in a real application? Which scenarios were
tested? -->

## Breaking Changes
<!-- Will users need to update their code or configurations? -->

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [ ] My code follows the repository's style guidelines
- [ ] New and existing tests pass locally
- [ ] I have added appropriate error handling
- [ ] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->

---------

Signed-off-by: Radoslav Dimitrov <radoslav@stacklok.com>
Co-authored-by: Tadas Antanavicius <tadas@tadasant.com>
2025-07-31 07:18:35 -07:00
Copilot
651c8dfee3
Add automatic runtime_hint setting to publisher create command (#205)
The `publisher create` command now automatically sets the `runtime_hint`
field in the generated `server.json` based on the `registry_name` when
no explicit `--runtime-hint` is provided:

- When `registry_name` is `docker`, sets `runtime_hint` to `docker`
- When `registry_name` is `npm`, sets `runtime_hint` to `npx`
- Other registries remain unchanged (no `runtime_hint` field)

## Before
```bash
# NPM registry - no runtime_hint field generated
$ mcp-publisher create --name "test-server" --description "Test" --repo-url "https://github.com/test/repo" --registry npm
```

```json
{
  "packages": [
    {
      "registry_name": "npm",
      "name": "test-server",
      "version": "1.0.0"
    }
  ]
}
```

## After
```bash
# NPM registry - automatically sets runtime_hint to "npx"
$ mcp-publisher create --name "test-server" --description "Test" --repo-url "https://github.com/test/repo" --registry npm
```

```json
{
  "packages": [
    {
      "registry_name": "npm",
      "name": "test-server",
      "version": "1.0.0",
      "runtime_hint": "npx"
    }
  ]
}
```

The manual `--runtime-hint` flag continues to work and takes precedence
over the automatic setting, ensuring backward compatibility.

Fixes #204.

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 Share your feedback on Copilot coding agent for the chance to win a
$200 gift card! Click
[here](https://survey.alchemer.com/s3/8343779/Copilot-Coding-agent) to
start the survey.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: toby <83556+toby@users.noreply.github.com>
2025-07-29 09:51:26 -06:00
Charles Lowell
4f5e85b510
End-to-end publish test using examples from docs (#199) 2025-07-25 16:09:17 -07:00
Tadas Antanavicius
774a0df592
Add validation tools for server.json schemas and examples (#176)
This is a first PR for #159 - adding some validation scripts. I want to
get to a place where we are confident that making schema changes is in
sync with the rest of our code. Step one is making sure the schemas are
in sync with our examples. Step two will be making sure the schemas are
in sync with our actual Registry implementation code.

This is just for the JSON right now; if we're feeling good about this
approach I'll do an analogous change for the OpenAPI schemas as well.

I'll also follow with adding usage of these scripts to our CI pipeline
so we have automated checks on them with every change.

## Summary
- Added CLI validation tools for JSON schemas and examples in
`docs/server-json/`
- Fixed some minor validation errors found in `examples.md`
- Ensures schema consistency and example validity in CI/CD pipelines

## Changes

### New Validation Tools
1. **`tools/validate-schemas`** - Validates that `schema.json` and
`registry-schema.json` are valid JSON Schema documents
2. **`tools/validate-examples`** - Validates all JSON examples in
`examples.md` against both schemas

### Key Features
- ✅ Validates JSON schema syntax and structure
- ✅ Validates all examples against both base and registry schemas
- ✅ Tracks validation counts to prevent silent failures
- ✅ Proper exit codes for CI integration
- ✅ Clear error messages for debugging

### Fixes to examples.md
- Added missing `repository.id` field in NuGet example
- Changed `repository.source` from "gitlab" to "github" in Docker
example

### Usage
```bash
# From repository root
./tools/validate-schemas.sh
./tools/validate-examples.sh
```

## Testing

I ran these scripts locally with minor (breaking) changes, which they
each correctly reported. As submitted, they are both passing.

🤖 Co-authored with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Charles Lowell <10964656+chlowell@users.noreply.github.com>
2025-07-15 11:32:54 -07:00
Tadas Antanavicius
4e221e49a8
Add linting documentation and pre-commit hooks (#177)
## Summary

This PR improves the developer experience by adding clear linting
documentation and optional pre-commit hooks to catch issues before CI.
Helpful to avoid fighting Claude Code / Copilot on "please make sure
linting passes CI".

## Changes

- Updated `README.md` with:
  - Go 1.23.x requirement (was "1.18 or later")
  - golangci-lint v1.61.0 in prerequisites
  - New Development section with linting instructions
  
- Updated `CLAUDE.md` with:
  - Development Setup section
  
- Added `.githooks/pre-commit`:
  - Runs golangci-lint and gofmt checks
  - References README for installation instructions
  - Can be bypassed with `--no-verify` when needed

## Test Plan

- [x] Verified pre-commit hook blocks commits when golangci-lint is
missing
- [x] Confirmed hook shows clear error message pointing to README
- [x] Tested that linting passes with Go 1.23.0 and golangci-lint
v1.61.0
- [x] Verified gofmt correctly identifies formatting issues

Co-authored w/ Claude Code

---------

Co-authored-by: Charles Lowell <10964656+chlowell@users.noreply.github.com>
2025-07-15 09:31:17 -07:00
Joel Verhagen
3c42f68750
Add documentation for the repository section (#174)
<!-- Provide a brief summary of your changes -->

## Motivation and Context
<!-- Why is this change needed? What problem does it solve? -->

Resolve https://github.com/modelcontextprotocol/registry/issues/173

## How Has This Been Tested?
<!-- Have you tested this in a real application? Which scenarios were
tested? -->

Copilot fixed my spelling mistakes.

## Breaking Changes
<!-- Will users need to update their code or configurations? -->

None.

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [x] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [ ] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [ ] My code follows the repository's style guidelines
- [ ] New and existing tests pass locally
- [ ] I have added appropriate error handling
- [ ] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->

Ideally the `id` would be populated by the publisher CLI tool "on the
way out" and MCP Registry would validate the `id`, perhaps using the
token used for auth in the case of private repositories.
2025-07-14 09:36:32 -07:00
Joel Verhagen
d42f11e479
Make value_hint optional to allow constant positional arguments (#172)
<!-- Provide a brief summary of your changes -->

## Motivation and Context
<!-- Why is this change needed? What problem does it solve? -->

This is one attempt to resolve
https://github.com/modelcontextprotocol/registry/issues/169.

Instead of adding a new "constant" argument type, I expanded the
existing positional one and just dropped the `value_hint` requirement. I
am not sure if this has VS Code impact @sandy081, @connor4312.

Also, removed unneeded release_date values from the samples.

## How Has This Been Tested?
<!-- Have you tested this in a real application? Which scenarios were
tested? -->

I tested the current server.json samples in the repo against the new
(less strict) schema. Of course they passed (aside from an unrelated bug
in my previous NuGet sample 🤦).

## Breaking Changes
<!-- Will users need to update their code or configurations? -->

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [x] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [ ] New and existing tests pass locally
- [ ] I have added appropriate error handling
- [x] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->
2025-07-12 09:34:36 -07:00
Tadas Antanavicius
05422afffb
Split OpenAPI specs into base and official registry versions (#171)
Closes #149

As noted in the FAQ update here, this is a helpful starting point in
thinking about this:

```
### What is the difference between "Official MCP Registry", "MCP Registry", "MCP registry", "MCP Registry API", etc?

There are four underlying concepts:
- "MCP Server Registry API" (or "MCP Registry API"): The OpenAPI specification defined in [openapi.yaml](./server-registry-api/openapi.yaml). This is a reusable API specification that anyone building any sort of "MCP server registry" should consider adopting / aligning with.
- "Official MCP Registry" (or "MCP Registry"): The application that lives at `https://registry.modelcontextprotocol.io`. This registry currently only catalogs MCP servers, but may be extended in the future to also catalog MCP client/host apps and frameworks.
- "Official MCP Registry API": The REST API that lives at `https://registry.modelcontextprotocol.io/api`, with an OpenAPI specification defined at [official-registry-openapi.yaml](./server-registry-api/official-registry-openapi.yaml)
- "MCP server registry" (or "MCP registry"): A third party, likely commercial, implementation of the MCP Server Registry API or derivative specification.
```

Prior to this PR, we were just treating "MCP Server Registry API" and
"Official MCP Registry API" to be the same thing. They are not the same:
the latter is inherently a more constrained version of the former. A
private deployment of a similar registry need not have constraints like
"the only valid source code repositories are `github` and `gitlab`".

This PR separates out the definitions to match that path forward.

## Notable Changes

### Base OpenAPI spec (`openapi.yaml`)
- Removed official-registry-specific constraints:
  - No maximum limit on `/servers` endpoint
  - No enum constraint on `Repository.source`
  - No enum constraint on `Package.registry_name`
- Removed `/v0` prefix from paths (it's now just baked into the
`official` one's URL prefix)
- Added `$id` for proper schema identification

### Official Registry OpenAPI spec (`official-registry-openapi.yaml`)
- Created as a derivative of the base spec using `$ref`
- Re-adds official-registry-specific constraints:
  - `Repository.source` enum: `[github]`
  - `Package.registry_name` enum: `[npm, docker, pypi, nuget]`

### Documentation updates
- Added `server-registry-api/README.md` explaining the relationship
between specs
- Updated FAQ to clarify terminology
- Reorganized docs structure
2025-07-10 00:46:01 +00:00
Tadas Antanavicius
b8f7f75644
Add CLAUDE.md file for Claude Code guidance (#170)
## Summary
- Adds CLAUDE.md file to provide guidance for Claude Code instances
working with this repository
- Includes essential development commands and high-level architecture
overview
- Follows the standard format for Claude Code documentation

## Details
The CLAUDE.md file contains:
- Common development commands for building, running, testing, and
linting
- Architecture overview explaining the clean architecture pattern
- Request flow documentation
- Key interfaces and their implementations
- Authentication flow details
- Important design patterns used in the codebase

This will help future Claude Code instances be more productive when
working with the MCP Registry codebase.

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

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Avinash Sridhar <sridharavinash@users.noreply.github.com>
2025-07-09 17:43:08 -07:00
Tadas Antanavicius
a5f417b6f5
Split "general" server.json from "registry-specific" server.json (#167)
Closes #155

The "generalized" `server.json` is the one that can be used in a variety
of situations:

- Discoverability on a centralized registry (i.e. our official Registry
work)
- Discoverability on a decentralized .well-known endpoint
- As a response to an initialization call, so the client knows
information about the MCP server to which it is connecting
- As an input into crafting a [DXT
file](https://www.anthropic.com/engineering/desktop-extensions)
- Packaged in with the source code of an MCP server, so as to have a
structured way context

Of these, the official Registry is but one use case. The Registry has a
unique set of concerns for which we are optimizing, like whitelisting of
specific registries we trust to host MCP server source code for the
public community (`npm`, `pypi`, etc). It is not necessary to have such
a constraint for the generalized server.json, which may be used in, for
example, an internal context where such a validation doesn't make sense.

So I've done the following at a high level:
- Renamed the prior `schema.json` to be `registry-schema.json`
- Introduced a more generic `schema.json` to serve as the schema for the
generalized `server.json`
- Refactored `registry-schema.json` to be simply a constraint on the
base `schema.json`

I made a few small changes in this transition:
- Removed `gitlab` as an option in `repository.source` for
`registry-schema.json`. I'm fine going live with just GitHub support;
would be happy to take a contribution from e.g. Gitlab employees or a
motivated Gitlab customer to expand anytime.
- Removed `homebrew` as an option in `packages.registry_name`; never
really made sense, not a place where folks are publishing MCP servers
- Added `docker` to `packages.runtime_hint`; was just a missing
oversight
- Gave both schemas a global `$id`
~- Removed `release_date` from both schemas. Certainly not something
that makes sense for the generalized schema. It actually doesn't make
sense for the Registry schema either, because this is the server.json
that _users will submit_, i.e. the _input_ into the Registry publication
API. `release_date` will be a piece of _output_ metadata. The Registry
API will be free to append such extra metadata for GET /:id requests of
servers, and the data can be present in the OpenAPI spec, but it does
not need to be in the registry-server.json JSON schema.~
  - Note this is no longer in this PR; rebased on #168 which included it
- Removed unnecessary enums from the generalized `schema.json`
2025-07-09 14:02:43 -07:00
Joel Verhagen
6a2e5d1b27
Align the server.json schema with the YAML (#168)
<!-- Provide a brief summary of your changes -->

## Motivation and Context

This is in support of
https://github.com/modelcontextprotocol/registry/issues/159, to make it
easier, I hope. My team noticed some differences in the JSON schema,
most notably the "choices" property was missing. I tried to write a tool
to do this but slowed down since I am not experienced with Go. This is a
first pass, maybe someone else can finish the tooling.

I restructured the JSON schema to break out child objects like the YAML
file, and brought the descriptions and example into sync. The only
differences are two extra properties in the YAML which are computed by
the server:

- `VersionDetail.is_latest` is not present in the JSON schema, computed
by the registry based on
https://github.com/modelcontextprotocol/registry/issues/158
- `Server.id` is not present in the JSON schema, generated by the
registry

The idea is the a tool could look at ServerDetail in the YAML and then
generate the schema.json with minimal fix-ups (add a root title, remove
`VersionDetail.is_latest` and `Server.id`.

~Question for @tadasant - should `VersionDetail.release_date` be in the
JSON schema? I think _no_ (and let it be computed) but it's there right
now.~ - aligned with
https://github.com/modelcontextprotocol/registry/pull/167 and removed

## How Has This Been Tested?

I have tested the JSON schema against the sample server.json in the repo
(files and markdown blocks).

## Breaking Changes

None.

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [x] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [ ] New and existing tests pass locally
- [ ] I have added appropriate error handling
- [x] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->
2025-07-09 10:27:38 -07:00
Xin Luo
f6fa98c914
Add more information about the value field under Input in the API doc (#164)
<!-- Provide a brief summary of your changes -->
Add more information about the value field under Input in the API doc.

## Motivation and Context
<!-- Why is this change needed? What problem does it solve? -->
the descrioption for
[value](81e5174a59/docs/openapi.yaml (L219))
is not clearly.

## How Has This Been Tested?
<!-- Have you tested this in a real application? Which scenarios were
tested? -->
No need.

## Breaking Changes
<!-- Will users need to update their code or configurations? -->
No

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ x ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [ x ] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [ x ] My code follows the repository's style guidelines
- [ x ] New and existing tests pass locally
- [ x ] I have added appropriate error handling
- [ x ] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->
2025-07-08 14:55:17 -07:00
Connor Peet
0911cec421
Resolve packages and remove unknown registries (#138) 2025-07-07 19:32:56 +00:00
Joel Verhagen
7d7a96551f Add new package registry document 2025-07-07 12:28:19 -06:00
Joel Verhagen
68ee3b9af9 Add NuGet to the MCP Registry, similar to npm and Python 2025-07-07 12:28:19 -06:00
copilot-swe-agent[bot]
81e5174a59 Update publisher CLI help output format to use standard output without timestamps and show flags in --long-flag/-short format
Co-authored-by: toby <83556+toby@users.noreply.github.com>
2025-07-02 19:40:25 -06:00
copilot-swe-agent[bot]
68b55735cb Fix linting errors in publisher CLI tool
Co-authored-by: toby <83556+toby@users.noreply.github.com>
2025-07-02 19:40:25 -06:00
copilot-swe-agent[bot]
e10d3f2b62 Add publisher binary to gitignore
Co-authored-by: toby <83556+toby@users.noreply.github.com>
2025-07-02 19:40:25 -06:00
copilot-swe-agent[bot]
662957fa7f Complete create command implementation with package arguments and updated documentation
Co-authored-by: toby <83556+toby@users.noreply.github.com>
2025-07-02 19:40:25 -06:00