Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
212bccd
feat: Add support for MCP Bundles (MCPB) in registry
joan-anthropic Aug 21, 2025
2ee6e00
feat: add PackageLocation
joan-anthropic Aug 22, 2025
84cdc81
feat: Add file hash generation support to publisher CLI
joan-anthropic Aug 22, 2025
aafe260
feat: refactor package metadata to use PackageLocation structure
joan-anthropic Aug 26, 2025
fb0283e
Merge branch 'main' into joan/dxt-support-server-json
joan-anthropic Aug 26, 2025
cec8cdd
chore: remove raw.githubusercontent.com from MCPB allowed hosts
joan-anthropic Aug 26, 2025
17b3824
fix: resolve compilation errors and test failures after merge
joan-anthropic Aug 26, 2025
8287e88
fix: resolve linting issues in publisher tool
joan-anthropic Aug 26, 2025
ca7fc20
fix: correct JSON syntax errors in server-json examples
joan-anthropic Aug 26, 2025
4ccfc41
refactor: remove hash generation/validation, keep schema field
joan-anthropic Aug 26, 2025
fb39c44
refactor: migrate from registry_name/name to package_type/registry/id…
joan-anthropic Aug 26, 2025
00fd953
fix: restore Unicode escapes for angle brackets in seed.json
joan-anthropic Aug 26, 2025
6b8dee7
refactor: change 'registry' field to 'registry_name' for clarity
joan-anthropic Aug 26, 2025
c7ed33c
Merge branch 'main' into joan/dxt-support-server-json
joan-anthropic Aug 26, 2025
e242a8d
fix: remove unnecessary repository IDs from examples
joan-anthropic Aug 26, 2025
c194b3d
fix: correct indentation in examples.md
joan-anthropic Aug 26, 2025
1aab2b4
fix: correct all indentation and syntax errors in examples.md
joan-anthropic Aug 26, 2025
6a3a4e1
fix: correct all block indentation in examples.md
joan-anthropic Aug 26, 2025
0ec0235
Revert test and auth files to minimal changes
joan-anthropic Aug 26, 2025
ac5fedb
Fix migrate-seed tool to handle schema conversion
joan-anthropic Aug 26, 2025
55f1b48
fix: add missing packages to test server responses in TestReadSeedFil…
joan-anthropic Aug 26, 2025
f91f45d
Merge main into joan/dxt-support-server-json
domdomegg Aug 27, 2025
ed35452
refactor: update package schema to use registry_type and registry_bas…
domdomegg Aug 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,798 changes: 1,597 additions & 1,201 deletions data/seed.json

Large diffs are not rendered by default.

113 changes: 82 additions & 31 deletions docs/server-json/examples.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ _These examples show the PublishRequest format used by the `/v0/publish` API end
},
"packages": [
{
"registry_name": "npm",
"name": "@modelcontextprotocol/server-brave-search",
"registry_type": "npm",
"registry_base_url": "https://registry.npmjs.org",
"identifier": "@modelcontextprotocol/server-brave-search",
"version": "1.0.2",
"environment_variables": [
{
Expand Down Expand Up @@ -58,8 +59,9 @@ Suppose your MCP server application requires a `mcp start` CLI arguments to star
},
"packages": [
{
"registry_name": "nuget",
"name": "Knapcode.SampleMcpServer",
"registry_type": "nuget",
"registry_base_url": "https://api.nuget.org",
"identifier": "Knapcode.SampleMcpServer",
"version": "0.4.0-beta",
"package_arguments": [
{
Expand Down Expand Up @@ -106,8 +108,9 @@ This will essentially instruct the MCP client to execute `dnx Knapcode.SampleMcp
},
"packages": [
{
"registry_name": "npm",
"name": "@modelcontextprotocol/server-filesystem",
"registry_type": "npm",
"registry_base_url": "https://registry.npmjs.org",
"identifier": "@modelcontextprotocol/server-filesystem",
"version": "1.0.2",
"package_arguments": [
{
Expand All @@ -128,8 +131,9 @@ This will essentially instruct the MCP client to execute `dnx Knapcode.SampleMcp
]
},
{
"registry_name": "docker",
"name": "mcp/filesystem",
"registry_type": "docker-hub",
"registry_base_url": "https://docker.io",
"identifier": "mcp/filesystem:1.0.2",
"version": "1.0.2",
"runtime_arguments": [
{
Expand Down Expand Up @@ -168,7 +172,7 @@ This will essentially instruct the MCP client to execute `dnx Knapcode.SampleMcp
}
]
}
]
]
},
"x-publisher": {
"tool": "ci-publisher",
Expand Down Expand Up @@ -235,8 +239,9 @@ This will essentially instruct the MCP client to execute `dnx Knapcode.SampleMcp
},
"packages": [
{
"registry_name": "pypi",
"name": "weather-mcp-server",
"registry_type": "pypi",
"registry_base_url": "https://pypi.org",
"identifier": "weather-mcp-server",
"version": "0.5.0",
"runtime_hint": "uvx",
"environment_variables": [
Expand All @@ -252,7 +257,7 @@ This will essentially instruct the MCP client to execute `dnx Knapcode.SampleMcp
"default": "celsius"
}
]
}
}
]
},
"x-publisher": {
Expand Down Expand Up @@ -287,8 +292,9 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6.
},
"packages": [
{
"registry_name": "nuget",
"name": "Knapcode.SampleMcpServer",
"registry_type": "nuget",
"registry_base_url": "https://api.nuget.org",
"identifier": "Knapcode.SampleMcpServer",
"version": "0.5.0",
"runtime_hint": "dnx",
"environment_variables": [
Expand All @@ -299,7 +305,7 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6.
"is_secret": false
}
]
}
}
]
},
"x-publisher": {
Expand Down Expand Up @@ -333,8 +339,9 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6.
},
"packages": [
{
"registry_name": "docker",
"name": "example/database-manager-mcp",
"registry_type": "docker-hub",
"registry_base_url": "https://docker.io",
"identifier": "example/database-manager-mcp",
"version": "3.1.0",
"runtime_arguments": [
{
Expand Down Expand Up @@ -433,20 +440,21 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6.
},
"packages": [
{
"registry_name": "npm",
"name": "@example/hybrid-mcp-server",
"registry_type": "npm",
"registry_base_url": "https://registry.npmjs.org",
"identifier": "@example/hybrid-mcp-server",
"version": "1.5.0",
"runtime_hint": "npx",
"package_arguments": [
{
"type": "named",
"name": "--mode",
"description": "Operation mode",
"default": "local",
"choices": ["local", "cached", "proxy"]
}
]
}
"package_arguments": [
{
"type": "named",
"name": "--mode",
"description": "Operation mode",
"default": "local",
"choices": ["local", "cached", "proxy"]
}
]
}
],
"remotes": [
{
Expand Down Expand Up @@ -490,6 +498,48 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6.
}
```

## MCP Bundle (MCPB) Package Example

```json
{
"server": {
"name": "io.modelcontextprotocol/text-editor",
"description": "MCP Bundle server for advanced text editing capabilities",
"repository": {
"url": "https://github.com/modelcontextprotocol/text-editor-mcpb",
"source": "github"
},
"version_detail": {
"version": "1.0.2"
},
"packages": [
{
"registry_type": "github-releases",
"registry_base_url": "https://github.com",
"identifier": "https://github.com/modelcontextprotocol/text-editor-mcpb/releases/download/v1.0.2/text-editor.mcpb",
"version": "1.0.2",
"file_hashes": {
"sha-256": "fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce"
}
}
]
},
"x-publisher": {
"tool": "mcpb-publisher",
"version": "1.0.0",
"build_info": {
"timestamp": "2023-12-02T09:15:00Z",
"bundle_format": "mcpb-v1"
}
}
}
```

This example shows an MCPB (MCP Bundle) package that:
- Is hosted on GitHub Releases (an allowlisted provider)
- Includes a SHA-256 hash for integrity verification
- Can be downloaded and executed directly by MCP clients that support MCPB

## Deprecated Server Example

```json
Expand All @@ -508,8 +558,9 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6.
},
"packages": [
{
"registry_name": "npm",
"name": "@legacy/old-weather-server",
"registry_type": "npm",
"registry_base_url": "https://registry.npmjs.org",
"identifier": "@legacy/old-weather-server",
"version": "0.9.5",
"environment_variables": [
{
Expand Down
18 changes: 15 additions & 3 deletions docs/server-json/registry-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,24 @@
"packages": {
"items": {
"properties": {
"registry_name": {
"registry_type": {
"enum": [
"npm",
"pypi",
"docker",
"nuget"
"docker-hub",
"nuget",
"github-releases",
"gitlab-releases"
]
},
"registry_base_url": {
"enum": [
"https://registry.npmjs.org",
"https://pypi.org",
"https://docker.io",
"https://api.nuget.org",
"https://github.com",
"https://gitlab.com"
]
},
"runtime_hint": {
Expand Down
33 changes: 22 additions & 11 deletions docs/server-json/server.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -80,28 +80,39 @@
},
"Package": {
"type": "object",
"required": [
"registry_name",
"name",
"version"
],
"properties": {
"registry_name": {
"registry_type": {
"type": "string",
"description": "Package registry type",
"example": "npm"
"description": "Registry type indicating how to download packages (e.g., 'npm', 'pypi', 'docker-hub', 'nuget', 'github-releases', 'gitlab-releases')",
"examples": ["npm", "pypi", "docker-hub", "nuget", "github-releases", "gitlab-releases"]
},
"name": {
"registry_base_url": {
"type": "string",
"description": "Package name in the registry",
"example": "io.modelcontextprotocol/filesystem"
"format": "uri",
"description": "Base URL of the package registry",
"examples": ["https://registry.npmjs.org", "https://pypi.org", "https://docker.io", "https://api.nuget.org", "https://github.com", "https://gitlab.com"]
},
"identifier": {
"type": "string",
"description": "Package identifier - either a package name (for registries) or URL (for direct downloads)",
"examples": ["@modelcontextprotocol/server-brave-search", "https://github.com/example/releases/download/v1.0.0/package.mcpb"]
},
"version": {
"type": "string",
"description": "Package version",
"example": "1.0.2",
"minLength": 1
},
"file_hashes": {
"type": "object",
"description": "Cryptographic hashes of the package file for integrity verification. Keys are hash algorithm names (e.g., 'sha-256'), values are the hash strings.",
"additionalProperties": {
"type": "string"
},
"example": {
"sha-256": "fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce"
}
},
"runtime_hint": {
"type": "string",
"description": "A hint to help clients determine the appropriate runtime for the package. This field should be provided when `runtime_arguments` are present.",
Expand Down
52 changes: 38 additions & 14 deletions docs/server-registry-api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,9 @@ paths:
version_detail:
version: "1.0.2"
packages:
- registry_name: "npm"
name: "@modelcontextprotocol/server-filesystem"
- registry_type: "npm"
registry_base_url: "https://registry.npmjs.org"
identifier: "@modelcontextprotocol/server-filesystem"
version: "1.0.2"
x-publisher:
tool: "publisher-cli"
Expand All @@ -117,8 +118,9 @@ paths:
version_detail:
version: "1.0.0"
packages:
- registry_name: "npm"
name: "@example/mcp-demo-server"
- registry_type: "npm"
registry_base_url: "https://registry.npmjs.org"
identifier: "@example/mcp-demo-server"
version: "1.0.0"
x-publisher:
contact_email: "[email protected]"
Expand Down Expand Up @@ -272,23 +274,45 @@ components:

Package:
type: object
required:
- registry_name
- name
- version
properties:
registry_name:
registry_type:
type: string
description: Package registry type
example: "npm"
name:
description: Registry type indicating how to download packages (e.g., 'npm', 'pypi', 'docker-hub', 'nuget', 'github-releases', 'gitlab-releases')
examples:
- "npm"
- "pypi"
- "docker-hub"
- "nuget"
- "github-releases"
- "gitlab-releases"
registry_base_url:
type: string
description: Package name in the registry
example: "io.modelcontextprotocol/filesystem"
format: uri
description: Base URL of the package registry
examples:
- "https://registry.npmjs.org"
- "https://pypi.org"
- "https://docker.io"
- "https://api.nuget.org"
- "https://github.com"
- "https://gitlab.com"
identifier:
type: string
description: Package identifier - either a package name (for registries) or URL (for direct downloads)
examples:
- "@modelcontextprotocol/server-brave-search"
- "https://github.com/example/releases/download/v1.0.0/package.mcpb"
version:
type: string
description: Package version
example: "1.0.2"
file_hashes:
type: object
description: Cryptographic hashes of the package file for integrity verification. Keys are hash algorithm names (e.g., 'sha-256'), values are the hash strings.
additionalProperties:
type: string
example:
sha-256: "fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce"
runtime_hint:
type: string
description: A hint to help clients determine the appropriate runtime for the package. This field should be provided when `runtime_arguments` are present.
Expand Down
Loading
Loading