From 68ee3b9af902fead6340c4ea635e5ed612faf841 Mon Sep 17 00:00:00 2001 From: Joel Verhagen Date: Mon, 7 Jul 2025 12:27:29 -0400 Subject: [PATCH] Add NuGet to the MCP Registry, similar to npm and Python --- docs/architecture.md | 2 ++ docs/design_principles.md | 4 ++-- docs/faq.md | 5 +++-- docs/openapi.yaml | 2 +- docs/server-json/examples.md | 35 +++++++++++++++++++++++++++++++++++ docs/server-json/schema.json | 8 +++++--- tools/publisher/server.json | 2 +- 7 files changed, 49 insertions(+), 9 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index bd55b0a..01b5f32 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -31,6 +31,7 @@ graph TB NPM[npm Registry] PYPI[PyPI Registry] DOCKER[Docker Hub] + NUGET[NuGet Gallery] DNS[DNS Services] GH[GitHub OAuth] end @@ -46,6 +47,7 @@ graph TB API -.-> |Verify| DNS API -.-> |Reference| NPM API -.-> |Reference| PYPI + API -.-> |Reference| NUGET API -.-> |Reference| DOCKER ``` diff --git a/docs/design_principles.md b/docs/design_principles.md index ef400c2..d76627a 100644 --- a/docs/design_principles.md +++ b/docs/design_principles.md @@ -9,7 +9,7 @@ The registry serves as the authoritative metadata repository for publicly-availa ## 2. Minimal Operational Burden - Design for low maintenance and operational overhead -- Delegate complexity to existing services where possible (GitHub for auth, npm/PyPI for packages) +- Delegate complexity to existing services where possible (GitHub for auth, npm/PyPI/NuGet for packages) - Avoid features that require constant human intervention or moderation - Build for reasonable downtime tolerance (24h acceptable) by having consumers cache data for their end-users @@ -21,7 +21,7 @@ The registry serves as the authoritative metadata repository for publicly-availa ## 4. Meets Industry Security Standards -- Leverage existing package registries (npm, PyPI, Docker Hub, etc.) for source code distribution, obviating the need to reinvent source code security +- Leverage existing package registries (npm, PyPI, NuGet, Docker Hub, etc.) for source code distribution, obviating the need to reinvent source code security - Use mechanisms like DNS verification, OAuth to provide base layer of authentication and trust - Implement rate limiting, field validation, and blacklisting to prevent abuse diff --git a/docs/faq.md b/docs/faq.md index a8a19e7..8f44e06 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -15,7 +15,7 @@ The MCP Registry is the official centralized metadata repository for publicly-ac ### Is the MCP Registry a package registry? -No. The MCP Registry stores metadata about MCP servers and references to where they're hosted (npm, PyPI, Docker Hub, etc.), but does not host the actual source code or packages. +No. The MCP Registry stores metadata about MCP servers and references to where they're hosted (npm, PyPI, NuGet, Docker Hub, etc.), but does not host the actual source code or packages. ### Who should use the MCP Registry directly? @@ -37,7 +37,7 @@ Servers are published by submitting a `server.json` file through our CLI tool. T 1. GitHub authentication 2. A public GitHub repository (even for closed-source servers - just for the metadata) -3. Your server package published to a supported registry (npm, PyPI, Docker Hub, etc.) +3. Your server package published to a supported registry (npm, PyPI, NuGet, Docker Hub, etc.) 4. Optional: DNS verification for custom namespacing ### What namespaces are available? @@ -54,6 +54,7 @@ No. While open source code is encouraged, it is not required for either locally - npm (Node.js packages) - PyPI (Python packages) +- NuGet.org (.NET packages) - GitHub Container Registry (GHCR) More can be added as the community desires; feel free to open an issue if you are interested in building support for another registry. diff --git a/docs/openapi.yaml b/docs/openapi.yaml index 9f61195..5dc5517 100644 --- a/docs/openapi.yaml +++ b/docs/openapi.yaml @@ -171,7 +171,7 @@ components: properties: registry_name: type: string - enum: [npm, docker, pypi, homebrew] + enum: [npm, docker, pypi, homebrew, nuget] example: "npm" name: type: string diff --git a/docs/server-json/examples.md b/docs/server-json/examples.md index ff2da12..de87c1c 100644 --- a/docs/server-json/examples.md +++ b/docs/server-json/examples.md @@ -179,6 +179,41 @@ } ``` +## NuGet (.NET) Package Example + +The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6. + +```json +{ + "name": "Knapcode.SampleMcpServer", + "description": "Sample NuGet MCP server for a random number and random weather", + "repository": { + "url": "https://github.com/joelverhagen/Knapcode.SampleMcpServer", + "source": "github" + }, + "version_detail": { + "version": "0.3.0", + "release_date": "2025-07-02T18:54:28.00Z" + }, + "packages": [ + { + "registry_name": "nuget", + "name": "Knapcode.SampleMcpServer", + "version": "0.3.0-beta", + "runtime_hint": "dnx", + "environment_variables": [ + { + "name": "WEATHER_CHOICES", + "description": "Comma separated list of weather descriptions to randomly select.", + "is_required": true, + "is_secret": false + } + ] + } + ] +} +``` + ## Complex Docker Server with Multiple Arguments ```json diff --git a/docs/server-json/schema.json b/docs/server-json/schema.json index 596c762..3d46b66 100644 --- a/docs/server-json/schema.json +++ b/docs/server-json/schema.json @@ -88,7 +88,8 @@ "npm", "docker", "pypi", - "homebrew" + "homebrew", + "nuget" ], "description": "Package registry type", "example": "npm" @@ -105,10 +106,11 @@ }, "runtime_hint": { "type": "string", - "description": "Hint for appropriate runtime (e.g., npx, uvx)", + "description": "Hint for appropriate runtime (e.g., npx, uvx, dnx)", "examples": [ "npx", - "uvx" + "uvx", + "dnx" ] }, "runtime_arguments": { diff --git a/tools/publisher/server.json b/tools/publisher/server.json index 6c4b168..97e6c65 100644 --- a/tools/publisher/server.json +++ b/tools/publisher/server.json @@ -24,7 +24,7 @@ } ] },{ - "registry_name": "docker>", + "registry_name": "docker", "name": "io.github./-cli", "version": "0.123.223", "runtime_hint": "docker",