From 56e8b4879b31b163dcc7fd17031277fd2a6d54e9 Mon Sep 17 00:00:00 2001 From: Tadas Antanavicius Date: Sun, 21 Sep 2025 08:00:09 -0400 Subject: [PATCH] Introduce serverId, rename id to versionId (#465) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wielded Claude Code to do this; across many iterations and have reviewed all the code + largely rewritten the PR commentary here. This PR implements the server ID consistency changes from [#396](https://github.com/modelcontextprotocol/registry/issues/396). Our goal is to: - Rename `id` to `versionId` to make it clear that it is the ID for a specific version, not a server - Introduce `serverId` as a net new concept. This will be 1:1 with `name`. While not strictly necessary (we could just use name as a PK), the convention of having a UUID as an ID on our objects is just a helpful subjective architecture decision. Plus also leaves open the door to reconsidering the "should we allow renames" question. ## Key Changes ### 🗄️ Database Schema Changes - **Renamed**: `id` column → `version_id` (unique identifier for each server version) ### 📋 Metadata Structure Updates - **JSON Schema**: Updated `_meta.io.modelcontextprotocol.registry/official` to include: - `serverId`: Consistent ID across all versions of a server - `versionId`: Unique ID for this specific version (renamed from `id`) ### 🔧 API Endpoint Updates - **New endpoint structure**: Changed from version-ID-based to server-ID-based URLs: - `GET /v0/servers/{server_id}` - Get latest version of server - `GET /v0/servers/{server_id}?version=X.X.X` - Get specific version - `GET /v0/servers/{server_id}/versions` - List all versions of a server - `PUT /v0/servers/{server_id}?version=X.X.X` - Edit specific version - **Consistent URL patterns**: All server endpoints now use `server_id` as the primary identifier ### Database Migration Strategy The migration (`005_add_server_id_rename_version_id.sql`): 1. Adds new `version_id` column 2. Generates deterministic UUIDs for servers with the same name 3. Updates JSON metadata to add `serverId` and rename `id` to `versionId` 4. Copies existing `id` values to `version_id` column 5. Drops old `id` column and makes `version_id` the new primary key ## Testing Besides of course automated tests passing, I: 1. Set up my local db with the pre-005-migration state, imported all the production data 2. Ran the migration 3. Spot checked some diffs of the data that resulted -- ```json // before { "name": "io.github.ruvnet/ruv-swarm", "_meta": { "io.modelcontextprotocol.registry/official": { "id": "0a9cda7f-2b73-4839-844b-6582f335de42", "is_latest": false, "updated_at": "2025-09-10T17:21:34.92137012Z", "published_at": "2025-09-10T17:15:32.69690433Z" } }, "version": "1.0.18", "repository": { "url": "", "source": "" }, "description": "Neural network swarm orchestration with WebAssembly acceleration and MCP integration" } // after { "name": "io.github.ruvnet/ruv-swarm", "_meta": { "io.modelcontextprotocol.registry/official": { "serverId": "e8538952-96af-4a33-9e31-7fbed012521e", "is_latest": false, "versionId": "0a9cda7f-2b73-4839-844b-6582f335de42", "updated_at": "2025-09-10T17:21:34.92137012Z", "published_at": "2025-09-10T17:15:32.69690433Z" } }, "version": "1.0.18", "repository": { "url": "", "source": "" }, "description": "Neural network swarm orchestration with WebAssembly acceleration and MCP integration" } ``` Servers that have multiple versions stayed consistent in their `serverId`: ```json // First version { "name": "app.getdialer/dialer", "_meta": { "io.modelcontextprotocol.registry/official": { "serverId": "80f08bdb-f3e4-4f19-b072-1676ae49b663", "is_latest": false, "versionId": "04f25b17-331d-48d7-b08b-37baece208a7", "updated_at": "2025-09-09T00:16:49.162620072Z", "published_at": "2025-09-08T23:47:09.452137971Z" } }, "status": "active", "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", "remotes": [ { "url": "https://getdialer.app/mcp", "type": "streamable-http" }, { "url": "https://getdialer.app/sse", "type": "sse" } ], "version": "1.0.0", "repository": { "url": "", "source": "" }, "description": "An MCP server that provides your you make outbound phone calls using your own phone number" } // Second version { "name": "app.getdialer/dialer", "_meta": { "io.modelcontextprotocol.registry/official": { "serverId": "80f08bdb-f3e4-4f19-b072-1676ae49b663", "is_latest": true, "versionId": "faa26cb9-3aad-415e-aece-f715fff5fe5e", "updated_at": "2025-09-09T00:16:49.107842808Z", "published_at": "2025-09-09T00:16:49.107842808Z" } }, "status": "active", "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", "remotes": [ { "url": "https://getdialer.app/mcp", "type": "streamable-http" }, { "url": "https://getdialer.app/sse", "type": "sse" } ], "version": "1.0.1", "repository": { "url": "", "source": "" }, "description": "An MCP server that provides lets you make outbound phone calls using your own phone number" } ``` And I also tried publishing a test server anew; looked good: ```bash ⏺ Bash(curl -s "http://localhost:8080/v0/servers/102dc4e4-6ca8-40e6-aa11-cd45763d3352" | jq '.') ⎿ { "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", "name": "io.modelcontextprotocol.anonymous/test-claude-migration-server", "description": "A test server to verify the new migration and API endpoints work correctly", "status": "active", "repository": { "url": "https://github.com/example/test-claude-migration-server", "source": "github", "id": "example/test-claude-migration-server" }, "version": "1.0.0", "_meta": { "io.modelcontextprotocol.registry/official": { "serverId": "102dc4e4-6ca8-40e6-aa11-cd45763d3352", "versionId": "48c9cd55-7bc4-4ac2-896e-59e81eb653e4", "published_at": "2025-09-12T18:33:23.264203-07:00", "updated_at": "2025-09-12T18:33:23.264203-07:00", "is_latest": true } } } ⏺ Bash(curl -s "http://localhost:8080/v0/servers/102dc4e4-6ca8-40e6-aa11-cd45763d3352/versions" | jq '.') ⎿ { "servers": [ { "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", "name": "io.modelcontextprotocol.anonymous/test-claude-migration-server", "description": "A test server to verify the new migration and API endpoints work correctly", "status": "active", "repository": { "url": "https://github.com/example/test-claude-migration-server", "source": "github", "id": "example/test-claude-migration-server" }, "version": "1.0.0", "_meta": { "io.modelcontextprotocol.registry/official": { "serverId": "102dc4e4-6ca8-40e6-aa11-cd45763d3352", "versionId": "48c9cd55-7bc4-4ac2-896e-59e81eb653e4", "published_at": "2025-09-12T18:33:23.264203-07:00", "updated_at": "2025-09-12T18:33:23.264203-07:00", "is_latest": true } } } ], "metadata": { "count": 1 } } ``` Co-Authored-By: Claude --------- Co-authored-by: Claude Co-authored-by: Preeti Dewani Co-authored-by: adam jones Co-authored-by: Adam Jones --- .gitignore | 3 +- cmd/publisher/commands/init.go | 2 +- cmd/publisher/commands/publish.go | 15 +- cmd/publisher/commands/publish_test.go | 134 + data/seed.json | 6572 +++++++++-------- docker-compose.yml | 1 + docs/explanations/versioning.md | 16 +- .../guides/administration/admin-operations.md | 98 +- docs/guides/consuming/use-rest-api.md | 10 +- .../contributing/add-package-registry.md | 14 +- docs/guides/publishing/publish-server.md | 28 +- docs/reference/api/CHANGELOG.md | 70 + docs/reference/api/generic-registry-api.md | 4 +- docs/reference/api/official-registry-api.md | 2 +- docs/reference/api/openapi.yaml | 97 +- docs/reference/cli/commands.md | 2 +- docs/reference/server-json/CHANGELOG.md | 126 + .../server-json/generic-server-json.md | 162 +- docs/reference/server-json/server.schema.json | 42 +- internal/api/handlers/v0/edit.go | 19 +- internal/api/handlers/v0/edit_test.go | 60 +- internal/api/handlers/v0/servers.go | 55 +- internal/api/handlers/v0/servers_test.go | 150 +- internal/api/handlers/v0/telemetry_test.go | 4 +- internal/database/database.go | 10 +- internal/database/memory.go | 119 +- .../005_add_server_id_rename_version_id.sql | 90 + internal/database/postgres.go | 165 +- internal/importer/importer_test.go | 12 +- internal/service/registry_service.go | 152 +- internal/service/registry_service_test.go | 275 +- internal/service/service.go | 10 +- internal/validators/registries/mcpb.go | 2 +- internal/validators/registries/mcpb_test.go | 2 +- internal/validators/validators.go | 8 +- internal/validators/validators_test.go | 25 +- pkg/api/v0/types.go | 42 +- pkg/model/types.go | 22 +- scripts/test_publish.sh | 21 +- tests/integration/README.md | 2 +- tests/integration/main.go | 4 +- tools/validate-examples/main.go | 2 +- tools/validate-schemas/main.go | 2 +- 43 files changed, 5185 insertions(+), 3466 deletions(-) create mode 100644 cmd/publisher/commands/publish_test.go create mode 100644 docs/reference/api/CHANGELOG.md create mode 100644 docs/reference/server-json/CHANGELOG.md create mode 100644 internal/database/migrations/005_add_server_id_rename_version_id.sql diff --git a/.gitignore b/.gitignore index da49e30..8d3145a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ build/ bin/ +tmp/ .db .env @@ -11,4 +12,4 @@ validate-schemas coverage.out coverage.html deploy/infra/infra -registry +registry \ No newline at end of file diff --git a/cmd/publisher/commands/init.go b/cmd/publisher/commands/init.go index ba9d933..7b2b32e 100644 --- a/cmd/publisher/commands/init.go +++ b/cmd/publisher/commands/init.go @@ -301,7 +301,7 @@ func createServerJSON( // Create server structure return apiv0.ServerJSON{ - Schema: "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + Schema: "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", Name: name, Description: description, Status: model.StatusActive, diff --git a/cmd/publisher/commands/publish.go b/cmd/publisher/commands/publish.go index e99cf1f..a72671c 100644 --- a/cmd/publisher/commands/publish.go +++ b/cmd/publisher/commands/publish.go @@ -37,6 +37,17 @@ func PublishCommand(args []string) error { return fmt.Errorf("invalid server.json: %w", err) } + // Check for deprecated schema and recommend migration + // Allow empty schema (will use default) but reject old schemas + if serverJSON.Schema != "" && !strings.Contains(serverJSON.Schema, "2025-09-16") { + return fmt.Errorf(`deprecated schema detected :%s. + +Migrate to the current schema format for new servers. + +📋 Migration checklist: https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/CHANGELOG.md#migration-checklist-for-publishers +📖 Full changelog with examples: https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/CHANGELOG.md`, serverJSON.Schema) + } + // Load saved token homeDir, err := os.UserHomeDir() if err != nil { @@ -71,8 +82,8 @@ func PublishCommand(args []string) error { } _, _ = fmt.Fprintln(os.Stdout, "✓ Successfully published") - if serverID := response.GetID(); serverID != "" { - _, _ = fmt.Fprintf(os.Stdout, "✓ Server Id %s", serverID) + if serverID := response.GetServerID(); serverID != "" { + _, _ = fmt.Fprintf(os.Stdout, "✓ Server Id %s version %s\n", serverID, response.Version) } return nil diff --git a/cmd/publisher/commands/publish_test.go b/cmd/publisher/commands/publish_test.go new file mode 100644 index 0000000..0dd3f62 --- /dev/null +++ b/cmd/publisher/commands/publish_test.go @@ -0,0 +1,134 @@ +package commands_test + +import ( + "encoding/json" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/modelcontextprotocol/registry/cmd/publisher/commands" + apiv0 "github.com/modelcontextprotocol/registry/pkg/api/v0" + "github.com/modelcontextprotocol/registry/pkg/model" +) + +func TestPublishCommand_DeprecatedSchema(t *testing.T) { + // Create a temporary directory for test files + tempDir, err := os.MkdirTemp("", "mcp-publisher-test") + if err != nil { + t.Fatalf("Failed to create temp dir: %v", err) + } + defer os.RemoveAll(tempDir) + + // Change to temp directory + originalDir, err := os.Getwd() + if err != nil { + t.Fatalf("Failed to get current dir: %v", err) + } + defer func() { _ = os.Chdir(originalDir) }() + + if err := os.Chdir(tempDir); err != nil { + t.Fatalf("Failed to change to temp dir: %v", err) + } + + tests := []struct { + name string + schema string + expectError bool + errorSubstr string + }{ + { + name: "deprecated 2025-07-09 schema should show warning", + schema: "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + expectError: true, + errorSubstr: "deprecated schema detected", + }, + { + name: "current 2025-09-16 schema should pass validation", + schema: "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", + expectError: false, + }, + { + name: "empty schema should pass validation", + schema: "", + expectError: false, + }, + { + name: "custom schema without 2025-07-09 should pass validation", + schema: "https://example.com/custom.schema.json", + expectError: true, + errorSubstr: "deprecated schema detected", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Create test server.json with specific schema + serverJSON := apiv0.ServerJSON{ + Schema: tt.schema, + Name: "com.example/test-server", + Description: "A test server", + Version: "1.0.0", + Status: model.StatusActive, + Repository: model.Repository{ + URL: "https://github.com/example/test", + Source: "github", + }, + Packages: []model.Package{ + { + RegistryType: model.RegistryTypeNPM, + RegistryBaseURL: model.RegistryURLNPM, + Identifier: "@example/test-server", + Version: "1.0.0", + Transport: model.Transport{ + Type: model.TransportTypeStdio, + }, + }, + }, + } + + jsonData, err := json.MarshalIndent(serverJSON, "", " ") + if err != nil { + t.Fatalf("Failed to marshal test JSON: %v", err) + } + + // Write server.json to temp directory + serverFile := filepath.Join(tempDir, "server.json") + if err := os.WriteFile(serverFile, jsonData, 0o600); err != nil { + t.Fatalf("Failed to write server.json: %v", err) + } + + err = commands.PublishCommand([]string{}) + + if tt.expectError { + if err == nil { + t.Errorf("Expected error for deprecated schema, but got none") + return + } + if !strings.Contains(err.Error(), tt.errorSubstr) { + t.Errorf("Expected error containing '%s', got: %v", tt.errorSubstr, err) + } + // Check that the error contains the migration links + if !strings.Contains(err.Error(), "Migration checklist:") { + t.Errorf("Expected error to contain migration checklist link") + } + if !strings.Contains(err.Error(), "Full changelog with examples:") { + t.Errorf("Expected error to contain changelog link") + } + } else { + // For non-deprecated schemas, we expect the command to fail at auth step, not schema validation + if err != nil && strings.Contains(err.Error(), "deprecated schema detected") { + t.Errorf("Unexpected deprecated schema error for schema '%s': %v", tt.schema, err) + } + + // We expect auth errors for valid schemas since we don't have a token + if err != nil && !strings.Contains(err.Error(), "not authenticated") && !strings.Contains(err.Error(), "failed to read token") { + t.Logf("Expected auth error for valid schema, got: %v", err) + } + } + + // Clean up for next test + os.Remove(serverFile) + }) + } +} diff --git a/data/seed.json b/data/seed.json index a57b819..ed42b04 100644 --- a/data/seed.json +++ b/data/seed.json @@ -12,15 +12,15 @@ "packages": [ { "version": "0.0.46", - "environment_variables": [ + "environmentVariables": [ { "description": "${input:apiKey}", "name": "API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@21st-dev/magic", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -28,10 +28,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4e9cf4cf-71f6-4aca-bae8-2d10a29ca2e0", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4e9cf4cf-71f6-4aca-bae8-2d10a29ca2e0", + "versionId": "4e9cf4cf-71f6-4aca-bae8-2d10a29ca2e0", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z" } } }, @@ -48,28 +49,28 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Directory to run the project from", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--directory", - "value_hint": "" + "valueHint": "" }, { "description": "Script to execute", - "is_required": true, + "isRequired": true, "format": "string", "value": "main_adfin_mcp.py", "default": "main_adfin_mcp.py", "type": "positional", - "value_hint": "main_adfin_mcp.py" + "valueHint": "main_adfin_mcp.py" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "ADFIN_EMAIL" @@ -79,9 +80,9 @@ "name": "ADFIN_PASSWORD" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "adfinmcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -89,10 +90,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d3669201-252f-403c-944b-c3ec0845782b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d3669201-252f-403c-944b-c3ec0845782b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d3669201-252f-403c-944b-c3ec0845782b" } } }, @@ -109,15 +111,15 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_API_KEY", "name": "AGENTQL_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "agentql-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -125,10 +127,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d86f2098-0be9-4b52-b32e-9d0f17333197", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d86f2098-0be9-4b52-b32e-9d0f17333197", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d86f2098-0be9-4b52-b32e-9d0f17333197" } } }, @@ -145,26 +148,26 @@ "packages": [ { "version": "0.0.16", - "package_arguments": [ + "packageArguments": [ { "description": "Positional argument", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp", "default": "mcp", "type": "positional", - "value_hint": "mcp" + "valueHint": "mcp" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "AGENTRPC_API_SECRET" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "agentrpc", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -172,10 +175,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c296f683-5578-474a-bbef-00cfc2716fbc", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c296f683-5578-474a-bbef-00cfc2716fbc", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c296f683-5578-474a-bbef-00cfc2716fbc" } } }, @@ -192,28 +196,28 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "With flag and value", - "is_required": true, + "isRequired": true, "format": "string", "value": "adb-mysql-mcp-server", "default": "adb-mysql-mcp-server", "type": "named", "name": "--with", - "value_hint": "adb-mysql-mcp-server" + "valueHint": "adb-mysql-mcp-server" }, { "description": "Script/module to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "adb-mysql-mcp-server", "default": "adb-mysql-mcp-server", "type": "positional", - "value_hint": "adb-mysql-mcp-server" + "valueHint": "adb-mysql-mcp-server" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "host", "name": "ADB_MYSQL_HOST" @@ -235,9 +239,9 @@ "name": "ADB_MYSQL_DATABASE" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "adb-mysql-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -245,10 +249,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7f6e6610-4df3-490e-95e3-03ec954eb2ab", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7f6e6610-4df3-490e-95e3-03ec954eb2ab", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7f6e6610-4df3-490e-95e3-03ec954eb2ab" } } }, @@ -265,7 +270,7 @@ "packages": [ { "version": "0.8.6", - "environment_variables": [ + "environmentVariables": [ { "description": "Your Access Key ID", "name": "ALIBABA_CLOUD_ACCESS_KEY_ID" @@ -275,9 +280,9 @@ "name": "ALIBABA_CLOUD_ACCESS_KEY_SECRET" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "alibaba-cloud-ops-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -285,10 +290,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "24303d73-1ee0-4119-b2f1-3a57c17de967", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "24303d73-1ee0-4119-b2f1-3a57c17de967", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "24303d73-1ee0-4119-b2f1-3a57c17de967" } } }, @@ -305,28 +311,28 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "The working directory for the command", - "is_required": true, + "isRequired": true, "format": "string", "value": "YOUR_REPO_PATH/src/iotdb_mcp_server", "default": "YOUR_REPO_PATH/src/iotdb_mcp_server", "type": "named", "name": "--directory", - "value_hint": "YOUR_REPO_PATH/src/iotdb_mcp_server" + "valueHint": "YOUR_REPO_PATH/src/iotdb_mcp_server" }, { "description": "Python script to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "server.py", "default": "server.py", "type": "positional", - "value_hint": "server.py" + "valueHint": "server.py" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "127.0.0.1", "name": "IOTDB_HOST" @@ -352,9 +358,9 @@ "name": "IOTDB_SQL_DIALECT" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "iotdb-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -362,10 +368,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "31d9b130-4676-45d9-930f-a8bc2d5a3b9e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "31d9b130-4676-45d9-930f-a8bc2d5a3b9e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "31d9b130-4676-45d9-930f-a8bc2d5a3b9e" } } }, @@ -382,9 +389,9 @@ "packages": [ { "version": "2.0.5", - "registry_type": "oci", + "registryType": "oci", "identifier": "apache/iotdb", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -392,10 +399,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "330047d1-f8c2-4931-9347-d133f1717de3", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "330047d1-f8c2-4931-9347-d133f1717de3", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "330047d1-f8c2-4931-9347-d133f1717de3" } } }, @@ -412,27 +420,27 @@ "packages": [ { "version": "0.1.31", - "package_arguments": [ + "packageArguments": [ { "description": "--actors lukaskrivka/google-maps-with-contact-details,apify/instagram-scraper", - "is_required": true, + "isRequired": true, "format": "string", "value": "lukaskrivka/google-maps-with-contact-details,apify/instagram-scraper", "default": "lukaskrivka/google-maps-with-contact-details,apify/instagram-scraper", "type": "named", "name": "--actors", - "value_hint": "lukaskrivka/google-maps-with-contact-details,apify/instagram-scraper" + "valueHint": "lukaskrivka/google-maps-with-contact-details,apify/instagram-scraper" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "${input:apify_token}", "name": "APIFY_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@apify/actors-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -440,10 +448,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "195dfdbd-bb15-4752-80b6-abc9212cd80f", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "195dfdbd-bb15-4752-80b6-abc9212cd80f", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "195dfdbd-bb15-4752-80b6-abc9212cd80f" } } }, @@ -460,15 +469,15 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "APIMATIC_API_KEY" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "apimatic-validator---mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -476,10 +485,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "5c95a170-d394-4b21-a100-bb953b872922", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "5c95a170-d394-4b21-a100-bb953b872922", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "5c95a170-d394-4b21-a100-bb953b872922" } } }, @@ -496,9 +506,9 @@ "packages": [ { "version": "11.32.1", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "arize-phoenix", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -506,10 +516,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "de2d7f51-ca20-4fac-abdb-85a912d26375", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "de2d7f51-ca20-4fac-abdb-85a912d26375", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "de2d7f51-ca20-4fac-abdb-85a912d26375" } } }, @@ -526,9 +537,9 @@ "packages": [ { "version": "1.2.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "@datastax/astra-db-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -536,10 +547,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "50f15d97-7d84-49f7-9232-f797e006358d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "50f15d97-7d84-49f7-9232-f797e006358d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "50f15d97-7d84-49f7-9232-f797e006358d" } } }, @@ -556,7 +568,7 @@ "packages": [ { "version": "0.2.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your_client_id_here", "name": "AUDIENSE_CLIENT_ID" @@ -570,9 +582,9 @@ "name": "TWITTER_BEARER_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-audiense-insights", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -580,10 +592,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d85fa87b-48e1-4b81-8408-9d0c446f7de3", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d85fa87b-48e1-4b81-8408-9d0c446f7de3", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d85fa87b-48e1-4b81-8408-9d0c446f7de3" } } }, @@ -600,15 +613,15 @@ "packages": [ { "version": "1.0.6", - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_token_here", "name": "BANKLESS_API_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@bankless/onchain-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -616,10 +629,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "2535daf3-637b-40d1-a4c2-41ef60a726b8", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "2535daf3-637b-40d1-a4c2-41ef60a726b8", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "2535daf3-637b-40d1-a4c2-41ef60a726b8" } } }, @@ -636,36 +650,36 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "use repo url", - "is_required": true, + "isRequired": true, "format": "string", "value": "git+https://github.com/ahnlabio/bicscan-mcp", "default": "git+https://github.com/ahnlabio/bicscan-mcp", "type": "named", "name": "--from", - "value_hint": "git+https://github.com/ahnlabio/bicscan-mcp" + "valueHint": "git+https://github.com/ahnlabio/bicscan-mcp" }, { "description": "subcommand or positional argument", - "is_required": true, + "isRequired": true, "format": "string", "value": "bicscan-mcp", "default": "bicscan-mcp", "type": "positional", - "value_hint": "bicscan-mcp" + "valueHint": "bicscan-mcp" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_BICSCAN_API_KEY_HERE", "name": "BICSCAN_API_KEY" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "bicscan-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -673,10 +687,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "36e14e79-6228-442f-b3c7-c7080b6282f0", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "36e14e79-6228-442f-b3c7-c7080b6282f0", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "36e14e79-6228-442f-b3c7-c7080b6282f0" } } }, @@ -693,46 +708,46 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "source package location", - "is_required": true, + "isRequired": true, "format": "string", "value": "git+https://github.com/bitrise-io/bitrise-mcp@v1.1.0", "default": "git+https://github.com/bitrise-io/bitrise-mcp@v1.1.0", "type": "named", "name": "--from", - "value_hint": "git+https://github.com/bitrise-io/bitrise-mcp@v1.1.0" + "valueHint": "git+https://github.com/bitrise-io/bitrise-mcp@v1.1.0" }, { "description": "local entrypoint command", - "is_required": true, + "isRequired": true, "format": "string", "value": "bitrise-mcp", "default": "bitrise-mcp", "type": "positional", - "value_hint": "bitrise-mcp" + "valueHint": "bitrise-mcp" }, { "description": "list of enabled API groups", - "is_required": true, + "isRequired": true, "format": "string", "value": "cache-items,pipelines", "default": "cache-items,pipelines", "type": "named", "name": "--enabled-api-groups", - "value_hint": "cache-items,pipelines" + "valueHint": "cache-items,pipelines" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "BITRISE_TOKEN" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "bitrise-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -740,10 +755,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "9e07df79-22e2-464d-a842-06f08b875196", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "9e07df79-22e2-464d-a842-06f08b875196", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "9e07df79-22e2-464d-a842-06f08b875196" } } }, @@ -760,19 +776,19 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { - "is_required": true, + "isRequired": true, "format": "string", "value": "src/mcp_server_box.py", "default": "src/mcp_server_box.py", "type": "positional", - "value_hint": "src/mcp_server_box.py" + "valueHint": "src/mcp_server_box.py" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-box", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -780,10 +796,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "46bcb36f-ede9-412e-8181-7c7ece41fa04", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "46bcb36f-ede9-412e-8181-7c7ece41fa04", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "46bcb36f-ede9-412e-8181-7c7ece41fa04" } } }, @@ -800,9 +817,9 @@ "packages": [ { "version": "0.2.2", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "chroma-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -810,10 +827,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "97de67c4-a78f-4ea7-9233-4da9fe6752cf", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "97de67c4-a78f-4ea7-9233-4da9fe6752cf", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "97de67c4-a78f-4ea7-9233-4da9fe6752cf" } } }, @@ -830,7 +848,7 @@ "packages": [ { "version": "0.7.1", - "environment_variables": [ + "environmentVariables": [ { "description": "your-circleci-token", "name": "CIRCLECI_TOKEN" @@ -840,9 +858,9 @@ "name": "CIRCLECI_BASE_URL" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@circleci/mcp-server-circleci", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -850,10 +868,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a48ff624-6d95-4b8e-a0ed-498c4d838411", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a48ff624-6d95-4b8e-a0ed-498c4d838411", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a48ff624-6d95-4b8e-a0ed-498c4d838411" } } }, @@ -870,38 +889,38 @@ "packages": [ { "version": "0.1.7", - "package_arguments": [ + "packageArguments": [ { "description": "Use the specified runtime feature", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp-clickhouse", "default": "mcp-clickhouse", "type": "named", "name": "--with", - "value_hint": "mcp-clickhouse" + "valueHint": "mcp-clickhouse" }, { "description": "Specify Python version", - "is_required": true, + "isRequired": true, "format": "string", "value": "3.13", "default": "3.13", "type": "named", "name": "--python", - "value_hint": "3.13" + "valueHint": "3.13" }, { "description": "Positional argument to run (script or module)", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp-clickhouse", "default": "mcp-clickhouse", "type": "positional", - "value_hint": "mcp-clickhouse" + "valueHint": "mcp-clickhouse" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "CLICKHOUSE_HOST" @@ -919,9 +938,9 @@ "name": "CLICKHOUSE_DATABASE" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-clickhouse", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -929,10 +948,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "98259539-3c6f-4462-b2b6-9a2567ff0545", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "98259539-3c6f-4462-b2b6-9a2567ff0545", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "98259539-3c6f-4462-b2b6-9a2567ff0545" } } }, @@ -949,20 +969,20 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "URL to SSE endpoint for observability", - "is_required": true, + "isRequired": true, "format": "string", "value": "https://observability.mcp.cloudflare.com/sse", "default": "https://observability.mcp.cloudflare.com/sse", "type": "positional", - "value_hint": "https://observability.mcp.cloudflare.com/sse" + "valueHint": "https://observability.mcp.cloudflare.com/sse" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@cloudflare/mcp-server-cloudflare", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -980,10 +1000,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "2ad7c503-7daa-46c8-9295-8a1ed53271a6", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "2ad7c503-7daa-46c8-9295-8a1ed53271a6", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "2ad7c503-7daa-46c8-9295-8a1ed53271a6" } } }, @@ -1000,7 +1021,7 @@ "packages": [ { "version": "0.0.1", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "CODACY_ACCOUNT_TOKEN" @@ -1010,9 +1031,9 @@ "name": "CODACY_CLI_VERSION" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@codacy/codacy-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -1020,10 +1041,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c746fe90-e3f6-4328-82c1-aeef49a2b6d9", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c746fe90-e3f6-4328-82c1-aeef49a2b6d9", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c746fe90-e3f6-4328-82c1-aeef49a2b6d9" } } }, @@ -1040,9 +1062,9 @@ "packages": [ { "version": "1.0.2", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "codelogic-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -1050,10 +1072,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6e6e3083-47bf-47da-9d0f-14805de093a9", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6e6e3083-47bf-47da-9d0f-14805de093a9", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6e6e3083-47bf-47da-9d0f-14805de093a9" } } }, @@ -1070,49 +1093,49 @@ "packages": [ { "version": "0.0.1", - "package_arguments": [ + "packageArguments": [ { "description": "API URL for the opik MCP server", - "is_required": true, + "isRequired": true, "format": "string", "value": "https://www.comet.com/opik/api", "default": "https://www.comet.com/opik/api", "type": "named", "name": "--apiUrl", - "value_hint": "https://www.comet.com/opik/api" + "valueHint": "https://www.comet.com/opik/api" }, { "description": "API Key for authentication", - "is_required": true, + "isRequired": true, "format": "string", "value": "YOUR_API_KEY", "default": "YOUR_API_KEY", "type": "named", "name": "--apiKey", - "value_hint": "YOUR_API_KEY" + "valueHint": "YOUR_API_KEY" }, { "description": "Workspace name", - "is_required": true, + "isRequired": true, "format": "string", "value": "default", "default": "default", "type": "named", "name": "--workspace", - "value_hint": "default" + "valueHint": "default" }, { "description": "Enable debug mode", - "is_required": true, + "isRequired": true, "format": "string", "value": "true", "default": "true", "type": "named", "name": "--debug", - "value_hint": "true" + "valueHint": "true" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "https://www.comet.com/opik/api", "name": "OPIK_API_BASE_URL" @@ -1126,9 +1149,9 @@ "name": "OPIK_WORKSPACE_NAME" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "test-opik-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -1136,10 +1159,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "61b3cbd8-8eee-4bef-a0ef-5fcaf6449201", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "61b3cbd8-8eee-4bef-a0ef-5fcaf6449201", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "61b3cbd8-8eee-4bef-a0ef-5fcaf6449201" } } }, @@ -1156,28 +1180,28 @@ "packages": [ { "version": "0.2.0", - "package_arguments": [ + "packageArguments": [ { "description": "Specify directory to work in.", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/cloned/repo/mcp-server-couchbase/", "default": "path/to/cloned/repo/mcp-server-couchbase/", "type": "named", "name": "--directory", - "value_hint": "path/to/cloned/repo/mcp-server-couchbase/" + "valueHint": "path/to/cloned/repo/mcp-server-couchbase/" }, { "description": "Positional argument for Python script to execute.", - "is_required": true, + "isRequired": true, "format": "string", "value": "src/mcp_server.py", "default": "src/mcp_server.py", "type": "positional", - "value_hint": "src/mcp_server.py" + "valueHint": "src/mcp_server.py" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "couchbases://connection-string", "name": "CB_CONNECTION_STRING" @@ -1195,9 +1219,9 @@ "name": "CB_BUCKET_NAME" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-couchbase", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -1205,10 +1229,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "3f49614c-5424-4875-92ef-9697923375cf", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "3f49614c-5424-4875-92ef-9697923375cf", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "3f49614c-5424-4875-92ef-9697923375cf" } } }, @@ -1225,54 +1250,54 @@ "packages": [ { "version": "0.1.13", - "package_arguments": [ + "packageArguments": [ { "description": "-i", - "is_required": true, + "isRequired": true, "format": "string", "value": "-i", "default": "-i", "type": "positional", - "value_hint": "-i" + "valueHint": "-i" }, { "description": "--rm", - "is_required": true, + "isRequired": true, "format": "string", "value": "--rm", "default": "--rm", "type": "positional", - "value_hint": "--rm" + "valueHint": "--rm" }, { "description": "-e", - "is_required": true, + "isRequired": true, "format": "string", "value": "DART_TOKEN", "default": "DART_TOKEN", "type": "named", "name": "-e", - "value_hint": "DART_TOKEN" + "valueHint": "DART_TOKEN" }, { "description": "mcp/dart", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp/dart", "default": "mcp/dart", "type": "positional", - "value_hint": "mcp/dart" + "valueHint": "mcp/dart" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "dsa_...", "name": "DART_TOKEN" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "dart-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -1280,10 +1305,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "9c2d91f0-76c4-4292-a19f-e81e962954b5", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "9c2d91f0-76c4-4292-a19f-e81e962954b5", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "9c2d91f0-76c4-4292-a19f-e81e962954b5" } } }, @@ -1300,9 +1326,9 @@ "packages": [ { "version": "0.3.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "devhub-cms-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -1310,10 +1336,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "1743c861-7e1a-42b2-a300-6059fcd82cb9", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "1743c861-7e1a-42b2-a300-6059fcd82cb9", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "1743c861-7e1a-42b2-a300-6059fcd82cb9" } } }, @@ -1330,9 +1357,9 @@ "packages": [ { "version": "0.1.2", - "registry_type": "npm", + "registryType": "npm", "identifier": "@dynatrace-oss/dynatrace-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -1340,10 +1367,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "3afff2d4-d77f-42c2-bf39-ce786ecb0ecf", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "3afff2d4-d77f-42c2-bf39-ce786ecb0ecf", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "3afff2d4-d77f-42c2-bf39-ce786ecb0ecf" } } }, @@ -1360,15 +1388,15 @@ "packages": [ { "version": "0.1.3", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "EDGEE_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@edgee/mcp-server-edgee", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -1376,10 +1404,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7c870985-c457-4221-8088-977680764f70", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7c870985-c457-4221-8088-977680764f70", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7c870985-c457-4221-8088-977680764f70" } } }, @@ -1396,10 +1425,10 @@ "packages": [ { "version": "1.0.10", - "package_arguments": [ + "packageArguments": [ { "description": "-i", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -1408,7 +1437,7 @@ }, { "description": "--rm", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -1417,45 +1446,45 @@ }, { "description": "-e EDUBASE_API_URL", - "is_required": true, + "isRequired": true, "format": "string", "value": "EDUBASE_API_URL", "default": "EDUBASE_API_URL", "type": "named", "name": "-e", - "value_hint": "EDUBASE_API_URL" + "valueHint": "EDUBASE_API_URL" }, { "description": "-e EDUBASE_API_APP", - "is_required": true, + "isRequired": true, "format": "string", "value": "EDUBASE_API_APP", "default": "EDUBASE_API_APP", "type": "named", "name": "-e", - "value_hint": "EDUBASE_API_APP" + "valueHint": "EDUBASE_API_APP" }, { "description": "-e EDUBASE_API_KEY", - "is_required": true, + "isRequired": true, "format": "string", "value": "EDUBASE_API_KEY", "default": "EDUBASE_API_KEY", "type": "named", "name": "-e", - "value_hint": "EDUBASE_API_KEY" + "valueHint": "EDUBASE_API_KEY" }, { "description": "edubase/mcp", - "is_required": true, + "isRequired": true, "format": "string", "value": "edubase/mcp", "default": "edubase/mcp", "type": "positional", - "value_hint": "edubase/mcp" + "valueHint": "edubase/mcp" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "https://domain.edubase.net/api", "name": "EDUBASE_API_URL" @@ -1469,9 +1498,9 @@ "name": "EDUBASE_API_KEY" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "@edubase/mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -1479,10 +1508,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "33102362-9e44-442f-8aa9-4443ce50c396", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "33102362-9e44-442f-8aa9-4443ce50c396", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "33102362-9e44-442f-8aa9-4443ce50c396" } } }, @@ -1499,18 +1529,18 @@ "packages": [ { "version": "0.1.1", - "package_arguments": [ + "packageArguments": [ { "description": "/path/to/your/project/dist/index.js", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/your/project/dist/index.js", "default": "/path/to/your/project/dist/index.js", "type": "positional", - "value_hint": "/path/to/your/project/dist/index.js" + "valueHint": "/path/to/your/project/dist/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your-elasticsearch-url", "name": "ES_URL" @@ -1520,9 +1550,9 @@ "name": "ES_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@elastic/mcp-server-elasticsearch", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -1530,10 +1560,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "1b8a16d9-0648-4790-b853-d919a6be16e9", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "1b8a16d9-0648-4790-b853-d919a6be16e9", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "1b8a16d9-0648-4790-b853-d919a6be16e9" } } }, @@ -1550,9 +1581,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-esignatures", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -1560,10 +1591,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d689b152-64e8-4f5d-a937-91331fa3a771", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d689b152-64e8-4f5d-a937-91331fa3a771", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d689b152-64e8-4f5d-a937-91331fa3a771" } } }, @@ -1580,27 +1612,27 @@ "packages": [ { "version": "0.3.10", - "package_arguments": [ + "packageArguments": [ { "description": "Comma-separated list of tools", - "is_required": true, + "isRequired": true, "format": "string", "value": "web_search_exa,research_paper_search,company_research,crawling,competitor_finder,linkedin_search,wikipedia_search_exa,github_search", "default": "web_search_exa,research_paper_search,company_research,crawling,competitor_finder,linkedin_search,wikipedia_search_exa,github_search", "type": "named", "name": "--tools", - "value_hint": "web_search_exa,research_paper_search,company_research,crawling,competitor_finder,linkedin_search,wikipedia_search_exa,github_search" + "valueHint": "web_search_exa,research_paper_search,company_research,crawling,competitor_finder,linkedin_search,wikipedia_search_exa,github_search" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key-here", "name": "EXA_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "exa-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -1608,10 +1640,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "2a2aa283-57c8-474f-8a27-27954214cb6b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "2a2aa283-57c8-474f-8a27-27954214cb6b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "2a2aa283-57c8-474f-8a27-27954214cb6b" } } }, @@ -1628,15 +1661,15 @@ "packages": [ { "version": "0.1.4", - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_FEWSATS_API_KEY", "name": "FEWSATS_API_KEY" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "fewsats-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -1644,10 +1677,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "0e7533d0-5925-4e06-a6bf-5da4e4e21aec", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "0e7533d0-5925-4e06-a6bf-5da4e4e21aec", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "0e7533d0-5925-4e06-a6bf-5da4e4e21aec" } } }, @@ -1664,50 +1698,50 @@ "packages": [ { "version": "0.1.3", - "package_arguments": [ + "packageArguments": [ { "description": "directory to run from", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/cloned/fibery-mcp-server", "default": "path/to/cloned/fibery-mcp-server", "type": "named", "name": "--directory", - "value_hint": "path/to/cloned/fibery-mcp-server" + "valueHint": "path/to/cloned/fibery-mcp-server" }, { "description": "server entry point", - "is_required": true, + "isRequired": true, "format": "string", "value": "fibery-mcp-server", "default": "fibery-mcp-server", "type": "positional", - "value_hint": "fibery-mcp-server" + "valueHint": "fibery-mcp-server" }, { "description": "Fibery host domain", - "is_required": true, + "isRequired": true, "format": "string", "value": "your-domain.fibery.io", "default": "your-domain.fibery.io", "type": "named", "name": "--fibery-host", - "value_hint": "your-domain.fibery.io" + "valueHint": "your-domain.fibery.io" }, { "description": "Fibery API Token", - "is_required": true, + "isRequired": true, "format": "string", "value": "your-api-token", "default": "your-api-token", "type": "named", "name": "--fibery-api-token", - "value_hint": "your-api-token" + "valueHint": "your-api-token" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "fibery-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -1715,10 +1749,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "78c126ff-906a-4596-9bf4-db2cf61796b8", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "78c126ff-906a-4596-9bf4-db2cf61796b8", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "78c126ff-906a-4596-9bf4-db2cf61796b8" } } }, @@ -1735,19 +1770,19 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { - "is_required": true, + "isRequired": true, "format": "string", "value": "server.py", "default": "server.py", "type": "positional", - "value_hint": "server.py" + "valueHint": "server.py" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -1755,10 +1790,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "2d870a4e-d521-4d66-a471-abce884ea07b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "2d870a4e-d521-4d66-a471-abce884ea07b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "2d870a4e-d521-4d66-a471-abce884ea07b" } } }, @@ -1775,9 +1811,9 @@ "packages": [ { "version": "1.9.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "firecrawl-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -1785,10 +1821,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "13b91785-9041-468d-a136-e6c9e9dd7be9", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "13b91785-9041-468d-a136-e6c9e9dd7be9", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "13b91785-9041-468d-a136-e6c9e9dd7be9" } } }, @@ -1805,9 +1842,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "todos", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -1815,10 +1852,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "0bee6074-d16a-4482-a315-5b8f0f1abcf1", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "0bee6074-d16a-4482-a315-5b8f0f1abcf1", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "0bee6074-d16a-4482-a315-5b8f0f1abcf1" } } }, @@ -1835,7 +1873,7 @@ "packages": [ { "version": "0.6.1", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "GLEAN_INSTANCE" @@ -1845,9 +1883,9 @@ "name": "GLEAN_API_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@gleanwork/mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -1855,10 +1893,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "3e50df21-8223-440d-bad9-dfc9ce117af4", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "3e50df21-8223-440d-bad9-dfc9ce117af4", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "3e50df21-8223-440d-bad9-dfc9ce117af4" } } }, @@ -1875,65 +1914,65 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "docker named argument for stdin", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "-i", - "value_hint": "-i" + "valueHint": "-i" }, { "description": "docker named argument for removing the container after exit", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--rm", - "value_hint": "--rm" + "valueHint": "--rm" }, { "description": "docker named argument to set environment variable", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "-e", - "value_hint": "-e" + "valueHint": "-e" }, { "description": "docker positional argument indicating the image name", - "is_required": true, + "isRequired": true, "format": "string", "value": "GYAZO_ACCESS_TOKEN", "default": "GYAZO_ACCESS_TOKEN", "type": "positional", - "value_hint": "GYAZO_ACCESS_TOKEN" + "valueHint": "GYAZO_ACCESS_TOKEN" }, { "description": "docker positional argument indicating the package to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "gyazo-mcp-server", "default": "gyazo-mcp-server", "type": "positional", - "value_hint": "gyazo-mcp-server" + "valueHint": "gyazo-mcp-server" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your-access-token-here", "name": "GYAZO_ACCESS_TOKEN" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "@notainc/gyazo-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -1941,10 +1980,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "11e3a5f5-867c-4f1e-ba79-1b803550fb1a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "11e3a5f5-867c-4f1e-ba79-1b803550fb1a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "11e3a5f5-867c-4f1e-ba79-1b803550fb1a" } } }, @@ -1961,15 +2001,15 @@ "packages": [ { "version": "0.1.2", - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key", "name": "GOTOHUMAN_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@gotohuman/mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -1977,10 +2017,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "0f970fc6-418a-45c7-a665-00e725e8338d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "0f970fc6-418a-45c7-a665-00e725e8338d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "0f970fc6-418a-45c7-a665-00e725e8338d" } } }, @@ -1997,10 +2038,10 @@ "packages": [ { "version": "0.6.5", - "package_arguments": [ + "packageArguments": [ { "description": "Remove container after exit", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -2009,42 +2050,42 @@ }, { "description": "Publish a container's port(s) to the host", - "is_required": true, + "isRequired": true, "format": "string", "value": "8000:8000", "default": "8000:8000", "type": "named", "name": "-p", - "value_hint": "8000:8000" + "valueHint": "8000:8000" }, { "description": "Set environment variable GRAFANA_URL", - "is_required": true, + "isRequired": true, "format": "string", "value": "GRAFANA_URL", "default": "GRAFANA_URL", "type": "named", "name": "-e", - "value_hint": "GRAFANA_URL" + "valueHint": "GRAFANA_URL" }, { "description": "Set environment variable GRAFANA_API_KEY", - "is_required": true, + "isRequired": true, "format": "string", "value": "GRAFANA_API_KEY", "default": "GRAFANA_API_KEY", "type": "named", "name": "-e", - "value_hint": "GRAFANA_API_KEY" + "valueHint": "GRAFANA_API_KEY" }, { "description": "Container image to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp/grafana", "default": "mcp/grafana", "type": "positional", - "value_hint": "mcp/grafana" + "valueHint": "mcp/grafana" }, { "description": "Enable debug mode", @@ -2055,7 +2096,7 @@ "name": "-debug" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "http://localhost:3000", "name": "GRAFANA_URL" @@ -2065,9 +2106,9 @@ "name": "GRAFANA_API_KEY" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "grafana/mcp-grafana", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -2075,10 +2116,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "1329d108-67d0-488a-85a1-cc65b58cf5cd", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "1329d108-67d0-488a-85a1-cc65b58cf5cd", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "1329d108-67d0-488a-85a1-cc65b58cf5cd" } } }, @@ -2095,7 +2137,7 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "${input:organization_id}", "name": "GRAPHLIT_ORGANIZATION_ID" @@ -2109,9 +2151,9 @@ "name": "GRAPHLIT_JWT_SECRET" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "graphlit-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -2119,10 +2161,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "e44b5cad-3801-4403-b8ee-67f3ea1cd909", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "e44b5cad-3801-4403-b8ee-67f3ea1cd909", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "e44b5cad-3801-4403-b8ee-67f3ea1cd909" } } }, @@ -2139,7 +2182,7 @@ "packages": [ { "version": "0.1.0", - "environment_variables": [ + "environmentVariables": [ { "description": "localhost", "name": "GREPTIMEDB_HOST" @@ -2157,9 +2200,9 @@ "name": "GREPTIMEDB_DATABASE" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "greptimedb-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -2167,10 +2210,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7974b19d-8030-428b-a016-168c65058b41", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7974b19d-8030-428b-a016-168c65058b41", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7974b19d-8030-428b-a016-168c65058b41" } } }, @@ -2187,9 +2231,9 @@ "packages": [ { "version": "1.0.4", - "registry_type": "npm", + "registryType": "npm", "identifier": "@heroku/mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -2197,10 +2241,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "cb1a844b-0145-433b-9a6f-f8ef19b2b3f4", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "cb1a844b-0145-433b-9a6f-f8ef19b2b3f4", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "cb1a844b-0145-433b-9a6f-f8ef19b2b3f4" } } }, @@ -2217,7 +2262,7 @@ "packages": [ { "version": "0.1.9", - "environment_variables": [ + "environmentVariables": [ { "description": "host", "name": "HOLOGRES_HOST" @@ -2239,9 +2284,9 @@ "name": "HOLOGRES_DATABASE" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "hologres-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -2249,10 +2294,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "e67dda78-7d99-43e5-9e98-c80267f34940", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "e67dda78-7d99-43e5-9e98-c80267f34940", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "e67dda78-7d99-43e5-9e98-c80267f34940" } } }, @@ -2269,15 +2315,15 @@ "packages": [ { "version": "1.0.25", - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key", "name": "HYPERBROWSER_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "hyperbrowser-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -2285,10 +2331,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "feb2b365-5fab-461e-a8d3-89e9349ee743", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "feb2b365-5fab-461e-a8d3-89e9349ee743", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "feb2b365-5fab-461e-a8d3-89e9349ee743" } } }, @@ -2305,9 +2352,9 @@ "packages": [ { "version": "0.0.1-security", - "registry_type": "npm", + "registryType": "npm", "identifier": "inbox-zero", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -2315,10 +2362,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "afd9f984-ea69-4a8c-86ac-fdb58f3ab37c", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "afd9f984-ea69-4a8c-86ac-fdb58f3ab37c", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "afd9f984-ea69-4a8c-86ac-fdb58f3ab37c" } } }, @@ -2335,7 +2383,7 @@ "packages": [ { "version": "1.0.3", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "INTEGRATION_APP_TOKEN" @@ -2345,9 +2393,9 @@ "name": "INTEGRATION_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@integration-app/mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -2355,10 +2403,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "584b368d-b659-4bac-9036-dc319cf8d88d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "584b368d-b659-4bac-9036-dc319cf8d88d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "584b368d-b659-4bac-9036-dc319cf8d88d" } } }, @@ -2375,15 +2424,15 @@ "packages": [ { "version": "1.8.0", - "environment_variables": [ + "environmentVariables": [ { "description": "true", "name": "LOG_ENABLED" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@jetbrains/mcp-proxy", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -2391,10 +2440,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a51c6dec-56ed-403e-831b-fa5f155f8696", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a51c6dec-56ed-403e-831b-fa5f155f8696", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a51c6dec-56ed-403e-831b-fa5f155f8696" } } }, @@ -2411,28 +2461,28 @@ "packages": [ { "version": "0.1.3", - "package_arguments": [ + "packageArguments": [ { "description": "Specifies the working directory", - "is_required": true, + "isRequired": true, "format": "string", "value": "/ABSOLUTE/PATH/TO/PARENT/FOLDER/kagimcp", "default": "/ABSOLUTE/PATH/TO/PARENT/FOLDER/kagimcp", "type": "named", "name": "--directory", - "value_hint": "/ABSOLUTE/PATH/TO/PARENT/FOLDER/kagimcp" + "valueHint": "/ABSOLUTE/PATH/TO/PARENT/FOLDER/kagimcp" }, { "description": "Name of the package or executable to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "kagimcp", "default": "kagimcp", "type": "positional", - "value_hint": "kagimcp" + "valueHint": "kagimcp" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_API_KEY_HERE", "name": "KAGI_API_KEY" @@ -2442,9 +2492,9 @@ "name": "KAGI_SUMMARIZER_ENGINE" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "kagimcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -2452,10 +2502,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "77963df5-3dc8-4961-ae0c-03e448b8713c", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "77963df5-3dc8-4961-ae0c-03e448b8713c", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "77963df5-3dc8-4961-ae0c-03e448b8713c" } } }, @@ -2472,38 +2523,38 @@ "packages": [ { "version": "0.17.4", - "package_arguments": [ + "packageArguments": [ { "description": "Module to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "-m keboola_mcp_server.cli", "default": "-m keboola_mcp_server.cli", "type": "positional", - "value_hint": "keboola_mcp_server.cli" + "valueHint": "keboola_mcp_server.cli" }, { "description": "Specify the transport type", - "is_required": true, + "isRequired": true, "format": "string", "value": "stdio", "default": "stdio", "type": "named", "name": "--transport", - "value_hint": "stdio" + "valueHint": "stdio" }, { "description": "API URL for Keboola Connection", - "is_required": true, + "isRequired": true, "format": "string", "value": "https://connection.YOUR_REGION.keboola.com", "default": "https://connection.YOUR_REGION.keboola.com", "type": "named", "name": "--api-url", - "value_hint": "https://connection.YOUR_REGION.keboola.com" + "valueHint": "https://connection.YOUR_REGION.keboola.com" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_keboola_storage_token", "name": "KBC_STORAGE_TOKEN" @@ -2513,9 +2564,9 @@ "name": "KBC_WORKSPACE_SCHEMA" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "keboola-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -2523,10 +2574,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "eba4813b-2591-4264-b7bc-c485b7652e92", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "eba4813b-2591-4264-b7bc-c485b7652e92", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "eba4813b-2591-4264-b7bc-c485b7652e92" } } }, @@ -2543,10 +2595,10 @@ "packages": [ { "version": "0.0.10", - "package_arguments": [ + "packageArguments": [ { "description": "Run the docker container in interactive mode", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -2555,7 +2607,7 @@ }, { "description": "Automatically remove the container when it exits", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -2564,26 +2616,26 @@ }, { "description": "Set environment variable LARA_ACCESS_KEY_ID in the container", - "is_required": true, + "isRequired": true, "format": "string", "value": "LARA_ACCESS_KEY_ID", "default": "LARA_ACCESS_KEY_ID", "type": "named", "name": "-e", - "value_hint": "LARA_ACCESS_KEY_ID" + "valueHint": "LARA_ACCESS_KEY_ID" }, { "description": "Set environment variable LARA_ACCESS_KEY_SECRET in the container", - "is_required": true, + "isRequired": true, "format": "string", "value": "LARA_ACCESS_KEY_SECRET", "default": "LARA_ACCESS_KEY_SECRET", "type": "named", "name": "-e", - "value_hint": "LARA_ACCESS_KEY_SECRET" + "valueHint": "LARA_ACCESS_KEY_SECRET" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "LARA_ACCESS_KEY_ID" @@ -2593,9 +2645,9 @@ "name": "LARA_ACCESS_KEY_SECRET" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "@translated/lara-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -2603,10 +2655,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "5026f1b0-0426-4ea2-8ec2-fab1fabb0a7e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "5026f1b0-0426-4ea2-8ec2-fab1fabb0a7e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "5026f1b0-0426-4ea2-8ec2-fab1fabb0a7e" } } }, @@ -2623,31 +2676,31 @@ "packages": [ { "version": "0.5.1", - "package_arguments": [ + "packageArguments": [ { "description": "SELECT trace_id, message, created_at, attributes->>'service.name' as service FROM records WHERE severity_text = 'ERROR' ORDER BY created_at DESC LIMIT 10", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "SELECT", - "value_hint": "SELECT trace_id, message, created_at, attributes->>'service.name' as service FROM records WHERE severity_text = 'ERROR' ORDER BY created_at DESC LIMIT 10" + "valueHint": "SELECT trace_id, message, created_at, attributes->>'service.name' as service FROM records WHERE severity_text = 'ERROR' ORDER BY created_at DESC LIMIT 10" }, { "description": "1440", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "1440", - "value_hint": "1440" + "valueHint": "1440" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "logfire-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -2655,10 +2708,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6e66e04c-86cc-43ec-90ed-1a91a0e4eb76", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6e66e04c-86cc-43ec-90ed-1a91a0e4eb76", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6e66e04c-86cc-43ec-90ed-1a91a0e4eb76" } } }, @@ -2675,7 +2729,7 @@ "packages": [ { "version": "0.0.1", - "environment_variables": [ + "environmentVariables": [ { "description": "your-public-key", "name": "LANGFUSE_PUBLIC_KEY" @@ -2689,9 +2743,9 @@ "name": "LANGFUSE_BASEURL" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-langfuse", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -2699,10 +2753,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "f88b50da-f452-452b-9f22-1c7da7542b36", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "f88b50da-f452-452b-9f22-1c7da7542b36", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "f88b50da-f452-452b-9f22-1c7da7542b36" } } }, @@ -2719,9 +2774,9 @@ "packages": [ { "version": "lingo.dev@0.111.4", - "registry_type": "oci", + "registryType": "oci", "identifier": "@lingo.dev", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -2729,10 +2784,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "1e2d718a-95b0-460b-8e57-86feec5356ce", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "1e2d718a-95b0-460b-8e57-86feec5356ce", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "1e2d718a-95b0-460b-8e57-86feec5356ce" } } }, @@ -2749,7 +2805,7 @@ "packages": [ { "version": "0.5.0", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "MAKE_API_KEY" @@ -2763,9 +2819,9 @@ "name": "MAKE_TEAM" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@makehq/mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -2773,10 +2829,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "f4fca7d7-fbab-4174-ba76-1396c3451cf1", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "f4fca7d7-fbab-4174-ba76-1396c3451cf1", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "f4fca7d7-fbab-4174-ba76-1396c3451cf1" } } }, @@ -2793,9 +2850,9 @@ "packages": [ { "version": "0.4.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "meilisearch-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -2803,10 +2860,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "11d467e3-6001-4e60-ba90-494ad9eb7ad2", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "11d467e3-6001-4e60-ba90-494ad9eb7ad2", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "11d467e3-6001-4e60-ba90-494ad9eb7ad2" } } }, @@ -2823,9 +2881,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-memgraph", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -2833,10 +2891,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "dd730dba-107c-40f0-b172-85500a22b5c2", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "dd730dba-107c-40f0-b172-85500a22b5c2", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "dd730dba-107c-40f0-b172-85500a22b5c2" } } }, @@ -2853,40 +2912,40 @@ "packages": [ { "version": "0.1.1", - "package_arguments": [ + "packageArguments": [ { "description": "Directory argument", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/mcp-server-milvus/src/mcp_server_milvus", "default": "/path/to/mcp-server-milvus/src/mcp_server_milvus", "type": "named", "name": "--directory", - "value_hint": "/path/to/mcp-server-milvus/src/mcp_server_milvus" + "valueHint": "/path/to/mcp-server-milvus/src/mcp_server_milvus" }, { "description": "Python server entry file", - "is_required": true, + "isRequired": true, "format": "string", "value": "server.py", "default": "server.py", "type": "positional", - "value_hint": "server.py" + "valueHint": "server.py" }, { "description": "Milvus URI", - "is_required": true, + "isRequired": true, "format": "string", "value": "http://127.0.0.1:19530", "default": "http://127.0.0.1:19530", "type": "named", "name": "--milvus-uri", - "value_hint": "http://127.0.0.1:19530" + "valueHint": "http://127.0.0.1:19530" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-milvus", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -2894,10 +2953,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "e458676a-2727-4daf-84c5-d607932fa000", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "e458676a-2727-4daf-84c5-d607932fa000", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "e458676a-2727-4daf-84c5-d607932fa000" } } }, @@ -2914,7 +2974,7 @@ "packages": [ { "version": "0.1.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key", "name": "MOMENTO_API_KEY" @@ -2928,9 +2988,9 @@ "name": "DEFAULT_TTL_SECONDS" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@gomomento/mcp-momento", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -2938,10 +2998,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b99e5603-6346-4b2c-bae8-876c9b71e18b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b99e5603-6346-4b2c-bae8-876c9b71e18b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b99e5603-6346-4b2c-bae8-876c9b71e18b" } } }, @@ -2958,31 +3019,31 @@ "packages": [ { "version": "0.1.1", - "package_arguments": [ + "packageArguments": [ { "description": "your-atlas-service-accounts-client-id", - "is_required": true, + "isRequired": true, "format": "string", "value": "your-atlas-service-accounts-client-id", "default": "your-atlas-service-accounts-client-id", "type": "named", "name": "--apiClientId", - "value_hint": "your-atlas-service-accounts-client-id" + "valueHint": "your-atlas-service-accounts-client-id" }, { "description": "your-atlas-service-accounts-client-secret", - "is_required": true, + "isRequired": true, "format": "string", "value": "your-atlas-service-accounts-client-secret", "default": "your-atlas-service-accounts-client-secret", "type": "named", "name": "--apiClientSecret", - "value_hint": "your-atlas-service-accounts-client-secret" + "valueHint": "your-atlas-service-accounts-client-secret" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "mongodb-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -2990,10 +3051,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "9fd2c1fb-b8a6-4411-89cf-d4612cc3a539", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "9fd2c1fb-b8a6-4411-89cf-d4612cc3a539", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "9fd2c1fb-b8a6-4411-89cf-d4612cc3a539" } } }, @@ -3010,50 +3072,50 @@ "packages": [ { "version": "0.4.2", - "package_arguments": [ + "packageArguments": [ { "description": "--directory /path/to/your/local/mcp-server-motherduck", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/your/local/mcp-server-motherduck", "default": "/path/to/your/local/mcp-server-motherduck", "type": "named", "name": "--directory", - "value_hint": "/path/to/your/local/mcp-server-motherduck" + "valueHint": "/path/to/your/local/mcp-server-motherduck" }, { "description": "mcp-server-motherduck", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp-server-motherduck", "default": "mcp-server-motherduck", "type": "positional", - "value_hint": "mcp-server-motherduck" + "valueHint": "mcp-server-motherduck" }, { "description": "--db-path md:", - "is_required": true, + "isRequired": true, "format": "string", "value": "md:", "default": "md:", "type": "named", "name": "--db-path", - "value_hint": "md:" + "valueHint": "md:" }, { "description": "--motherduck-token ", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--motherduck-token", - "value_hint": "" + "valueHint": "" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-motherduck", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -3061,10 +3123,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b3fa3fa4-901d-4584-82cf-d027dbdf290b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b3fa3fa4-901d-4584-82cf-d027dbdf290b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b3fa3fa4-901d-4584-82cf-d027dbdf290b" } } }, @@ -3081,29 +3144,29 @@ "packages": [ { "version": "0.4.0", - "package_arguments": [ + "packageArguments": [ { "description": "Start the Neon MCP server", - "is_required": true, + "isRequired": true, "format": "string", "value": "start", "default": "start", "type": "positional", - "value_hint": "start" + "valueHint": "start" }, { "description": "Your Neon API key", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "positional", - "value_hint": "" + "valueHint": "" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@neondatabase/mcp-server-neon", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -3111,10 +3174,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "9a6bd437-fe20-4f40-b776-5507f2871441", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "9a6bd437-fe20-4f40-b776-5507f2871441", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "9a6bd437-fe20-4f40-b776-5507f2871441" } } }, @@ -3131,9 +3195,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-oceanbase", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -3141,10 +3205,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "afe07206-691c-4bfb-bf17-8a39014cf4a7", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "afe07206-691c-4bfb-bf17-8a39014cf4a7", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "afe07206-691c-4bfb-bf17-8a39014cf4a7" } } }, @@ -3161,15 +3226,15 @@ "packages": [ { "version": "1.0.18", - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_API_KEY_HERE", "name": "OCTAGON_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "octagon-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -3177,10 +3242,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "2d53cc39-27e0-446f-96b5-1324bab9eb21", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "2d53cc39-27e0-446f-96b5-1324bab9eb21", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "2d53cc39-27e0-446f-96b5-1324bab9eb21" } } }, @@ -3197,28 +3263,28 @@ "packages": [ { "version": "0.2.0", - "package_arguments": [ + "packageArguments": [ { "description": "Set the working directory", - "is_required": true, + "isRequired": true, "format": "string", "value": "//oxylabs-mcp", "default": "//oxylabs-mcp", "type": "named", "name": "--directory", - "value_hint": "//oxylabs-mcp" + "valueHint": "//oxylabs-mcp" }, { "description": "Python application/module to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "oxylabs-mcp", "default": "oxylabs-mcp", "type": "positional", - "value_hint": "oxylabs-mcp" + "valueHint": "oxylabs-mcp" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "OXYLABS_USERNAME", "name": "OXYLABS_USERNAME" @@ -3228,9 +3294,9 @@ "name": "OXYLABS_PASSWORD" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "oxylabs-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -3238,10 +3304,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4632fbcb-d313-4e26-ad1d-aea8f57524f7", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4632fbcb-d313-4e26-ad1d-aea8f57524f7", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4632fbcb-d313-4e26-ad1d-aea8f57524f7" } } }, @@ -3258,18 +3325,18 @@ "packages": [ { "version": "0.1.2", - "package_arguments": [ + "packageArguments": [ { "description": "Path to the mcp server entry point", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/paddle-mcp-server/build/index.js", "default": "path/to/paddle-mcp-server/build/index.js", "type": "positional", - "value_hint": "path/to/paddle-mcp-server/build/index.js" + "valueHint": "path/to/paddle-mcp-server/build/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_key", "name": "PADDLE_API_KEY" @@ -3279,9 +3346,9 @@ "name": "PADDLE_ENVIRONMENT" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@paddle/paddle-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -3289,10 +3356,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "be79836b-8a99-4e4e-9487-c81c02833f4a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "be79836b-8a99-4e4e-9487-c81c02833f4a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "be79836b-8a99-4e4e-9487-c81c02833f4a" } } }, @@ -3309,9 +3377,9 @@ "packages": [ { "version": "0.1.14", - "registry_type": "npm", + "registryType": "npm", "identifier": "@pinecone-database/mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -3319,10 +3387,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ed4c9613-5046-4570-8d15-209f7294ba75", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ed4c9613-5046-4570-8d15-209f7294ba75", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ed4c9613-5046-4570-8d15-209f7294ba75" } } }, @@ -3339,10 +3408,10 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "-i", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -3351,7 +3420,7 @@ }, { "description": "--rm", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -3360,35 +3429,35 @@ }, { "description": "-e PINECONE_API_KEY", - "is_required": true, + "isRequired": true, "format": "string", "value": "PINECONE_API_KEY", "default": "PINECONE_API_KEY", "type": "named", "name": "-e", - "value_hint": "PINECONE_API_KEY" + "valueHint": "PINECONE_API_KEY" }, { "description": "-e PINECONE_ASSISTANT_HOST", - "is_required": true, + "isRequired": true, "format": "string", "value": "PINECONE_ASSISTANT_HOST", "default": "PINECONE_ASSISTANT_HOST", "type": "named", "name": "-e", - "value_hint": "PINECONE_ASSISTANT_HOST" + "valueHint": "PINECONE_ASSISTANT_HOST" }, { "description": "pinecone/assistant-mcp", - "is_required": true, + "isRequired": true, "format": "string", "value": "pinecone/assistant-mcp", "default": "pinecone/assistant-mcp", "type": "positional", - "value_hint": "pinecone/assistant-mcp" + "valueHint": "pinecone/assistant-mcp" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "PINECONE_API_KEY" @@ -3398,9 +3467,9 @@ "name": "PINECONE_ASSISTANT_HOST" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "pinecone-io/assistant-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -3408,10 +3477,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "08668c6a-c2f6-47b0-a4e0-75a8ee9bcf10", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "08668c6a-c2f6-47b0-a4e0-75a8ee9bcf10", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "08668c6a-c2f6-47b0-a4e0-75a8ee9bcf10" } } }, @@ -3428,27 +3498,27 @@ "packages": [ { "version": "0.0.7", - "package_arguments": [ + "packageArguments": [ { "description": "Partition identifier (optional)", - "is_required": true, + "isRequired": true, "format": "string", "value": "optional_partition_id", "default": "optional_partition_id", "type": "named", "name": "--partition", - "value_hint": "optional_partition_id" + "valueHint": "optional_partition_id" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_key", "name": "RAGIE_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@ragieai/mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -3456,10 +3526,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "324d6879-eb6f-4565-bdeb-6c4b00d91384", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "324d6879-eb6f-4565-bdeb-6c4b00d91384", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "324d6879-eb6f-4565-bdeb-6c4b00d91384" } } }, @@ -3476,51 +3547,51 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "-i", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "-i", - "value_hint": "-i" + "valueHint": "-i" }, { "description": "--rm", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--rm", - "value_hint": "--rm" + "valueHint": "--rm" }, { "description": "-e API_KEY=", - "is_required": true, + "isRequired": true, "format": "string", "value": "API_KEY=", "default": "API_KEY=", "type": "named", "name": "-e", - "value_hint": "API_KEY=" + "valueHint": "API_KEY=" }, { "description": "-e SECRET_KEY=", - "is_required": true, + "isRequired": true, "format": "string", "value": "SECRET_KEY=", "default": "SECRET_KEY=", "type": "named", "name": "-e", - "value_hint": "SECRET_KEY=" + "valueHint": "SECRET_KEY=" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-redis-cloud", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -3528,10 +3599,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b8c0e12b-0c04-486d-95a7-caa33b9eefeb", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b8c0e12b-0c04-486d-95a7-caa33b9eefeb", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b8c0e12b-0c04-486d-95a7-caa33b9eefeb" } } }, @@ -3548,20 +3620,20 @@ "packages": [ { "version": "0.7.1", - "package_arguments": [ + "packageArguments": [ { "description": "Publish port 8000:8000", - "is_required": true, + "isRequired": true, "format": "string", "value": "8000:8000", "default": "8000:8000", "type": "named", "name": "-p", - "value_hint": "8000:8000" + "valueHint": "8000:8000" }, { "description": "Run in interactive mode", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -3570,7 +3642,7 @@ }, { "description": "Remove container after exit", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -3579,45 +3651,45 @@ }, { "description": "Set environment variable QDRANT_URL", - "is_required": true, + "isRequired": true, "format": "string", "value": "QDRANT_URL", "default": "QDRANT_URL", "type": "named", "name": "-e", - "value_hint": "QDRANT_URL" + "valueHint": "QDRANT_URL" }, { "description": "Set environment variable QDRANT_API_KEY", - "is_required": true, + "isRequired": true, "format": "string", "value": "QDRANT_API_KEY", "default": "QDRANT_API_KEY", "type": "named", "name": "-e", - "value_hint": "QDRANT_API_KEY" + "valueHint": "QDRANT_API_KEY" }, { "description": "Set environment variable COLLECTION_NAME", - "is_required": true, + "isRequired": true, "format": "string", "value": "COLLECTION_NAME", "default": "COLLECTION_NAME", "type": "named", "name": "-e", - "value_hint": "COLLECTION_NAME" + "valueHint": "COLLECTION_NAME" }, { "description": "Docker image to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp-server-qdrant", "default": "mcp-server-qdrant", "type": "positional", - "value_hint": "mcp-server-qdrant" + "valueHint": "mcp-server-qdrant" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "${input:qdrantUrl}", "name": "QDRANT_URL" @@ -3631,9 +3703,9 @@ "name": "COLLECTION_NAME" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-qdrant", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -3641,10 +3713,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "823afe6f-4494-4fc1-a2ab-2ca989e59d21", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "823afe6f-4494-4fc1-a2ab-2ca989e59d21", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "823afe6f-4494-4fc1-a2ab-2ca989e59d21" } } }, @@ -3661,29 +3734,29 @@ "packages": [ { "version": "0.0.1", - "package_arguments": [ + "packageArguments": [ { "description": "Specify the directory to use", - "is_required": true, + "isRequired": true, "format": "string", "value": "//ramp-mcp", "default": "//ramp-mcp", "type": "named", "name": "--directory", - "value_hint": "//ramp-mcp" + "valueHint": "//ramp-mcp" }, { "description": "Application name", - "is_required": true, + "isRequired": true, "format": "string", "value": "ramp-mcp", "default": "ramp-mcp", "type": "positional", - "value_hint": "ramp-mcp" + "valueHint": "ramp-mcp" }, { "description": "Run in silent mode", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -3692,15 +3765,15 @@ }, { "description": "Specify resource permissions", - "is_required": true, + "isRequired": true, "format": "string", "value": "transactions:read,reimbursements:read", "default": "transactions:read,reimbursements:read", "type": "positional", - "value_hint": "transactions:read,reimbursements:read" + "valueHint": "transactions:read,reimbursements:read" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "RAMP_CLIENT_ID" @@ -3714,9 +3787,9 @@ "name": "RAMP_ENV" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "ramp-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -3724,10 +3797,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "687591a4-a5da-44df-8d55-f32e19d5658a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "687591a4-a5da-44df-8d55-f32e19d5658a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "687591a4-a5da-44df-8d55-f32e19d5658a" } } }, @@ -3744,15 +3818,15 @@ "packages": [ { "version": "0.1.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your-pat-token-ken", "name": "RAYGUN_PAT_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@raygun.io/mcp-server-raygun", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -3760,10 +3834,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "f6ee7600-c27a-4210-9a94-29a35c41c274", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "f6ee7600-c27a-4210-9a94-29a35c41c274", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "f6ee7600-c27a-4210-9a94-29a35c41c274" } } }, @@ -3780,21 +3855,21 @@ "packages": [ { "version": "1.1.3", - "package_arguments": [ + "packageArguments": [ { "description": "Rember API Key", - "is_required": true, + "isRequired": true, "format": "string", "value": "YOUR_REMBER_API_KEY", "default": "YOUR_REMBER_API_KEY", "type": "named", "name": "--api-key", - "value_hint": "YOUR_REMBER_API_KEY" + "valueHint": "YOUR_REMBER_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@getrember/mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -3802,10 +3877,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "5e354d7f-e19e-40ba-a760-342d5c93e9aa", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "5e354d7f-e19e-40ba-a760-342d5c93e9aa", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "5e354d7f-e19e-40ba-a760-342d5c93e9aa" } } }, @@ -3822,15 +3898,15 @@ "packages": [ { "version": "0.2.0", - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_SEARCH1API_KEY", "name": "SEARCH1API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "search1api-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -3838,10 +3914,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "cb1647e0-2df7-4f2a-b63b-cfaea1e5e98a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "cb1647e0-2df7-4f2a-b63b-cfaea1e5e98a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "cb1647e0-2df7-4f2a-b63b-cfaea1e5e98a" } } }, @@ -3858,26 +3935,26 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "Positional argument for 'path/to/screenshotone/mcp/build/index.js'", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/screenshotone/mcp/build/index.js", "default": "path/to/screenshotone/mcp/build/index.js", "type": "positional", - "value_hint": "path/to/screenshotone/mcp/build/index.js" + "valueHint": "path/to/screenshotone/mcp/build/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "SCREENSHOTONE_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "screenshotone-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -3885,10 +3962,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "87c7dec1-1b0c-414b-9f7b-7a113e67989d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "87c7dec1-1b0c-414b-9f7b-7a113e67989d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "87c7dec1-1b0c-414b-9f7b-7a113e67989d" } } }, @@ -3905,9 +3983,9 @@ "packages": [ { "version": "0.2.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "semgrep-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -3915,10 +3993,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d012ea8c-2f32-43e4-9583-7418d750193e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d012ea8c-2f32-43e4-9583-7418d750193e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d012ea8c-2f32-43e4-9583-7418d750193e" } } }, @@ -3935,29 +4014,29 @@ "packages": [ { "version": "0.4.12", - "package_arguments": [ + "packageArguments": [ { "description": "Start the single store MCP server", - "is_required": true, + "isRequired": true, "format": "string", "value": "start", "default": "start", "type": "positional", - "value_hint": "start" + "valueHint": "start" }, { "description": "SingleStore API Key", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "positional", - "value_hint": "" + "valueHint": "" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "singlestore_mcp_server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -3965,10 +4044,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "901e1b1c-7414-4240-89b8-1def9aca4708", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "901e1b1c-7414-4240-89b8-1def9aca4708", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "901e1b1c-7414-4240-89b8-1def9aca4708" } } }, @@ -3985,15 +4065,15 @@ "packages": [ { "version": "0.2.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key-here", "name": "TAVILY_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "tavily-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -4001,10 +4081,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ba8028f7-73e6-4d3d-9974-790d438a1446", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ba8028f7-73e6-4d3d-9974-790d438a1446", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ba8028f7-73e6-4d3d-9974-790d438a1446" } } }, @@ -4021,9 +4102,9 @@ "packages": [ { "version": "1.20.9", - "registry_type": "npm", + "registryType": "npm", "identifier": "tianji", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -4031,10 +4112,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "9dd7f908-4c1b-4ba3-a33f-86be881cc8b6", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "9dd7f908-4c1b-4ba3-a33f-86be881cc8b6", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "9dd7f908-4c1b-4ba3-a33f-86be881cc8b6" } } }, @@ -4051,9 +4133,9 @@ "packages": [ { "version": "1.0.2", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-tinybird", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -4061,10 +4143,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "adb9a058-774f-4505-aa80-1afa9bab8cb9", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "adb9a058-774f-4505-aa80-1afa9bab8cb9", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "adb9a058-774f-4505-aa80-1afa9bab8cb9" } } }, @@ -4081,30 +4164,30 @@ "packages": [ { "version": "0.1.6", - "package_arguments": [ + "packageArguments": [ { "description": "Directory to use", - "is_required": true, + "isRequired": true, "format": "string", "value": "ABSOLUTE/PATH/TO/YOUR-UNS-MCP-REPO/uns_mcp", "default": "ABSOLUTE/PATH/TO/YOUR-UNS-MCP-REPO/uns_mcp", "type": "named", "name": "--directory", - "value_hint": "ABSOLUTE/PATH/TO/YOUR-UNS-MCP-REPO/uns_mcp" + "valueHint": "ABSOLUTE/PATH/TO/YOUR-UNS-MCP-REPO/uns_mcp" }, { "description": "Python script file", - "is_required": true, + "isRequired": true, "format": "string", "value": "server.py", "default": "server.py", "type": "positional", - "value_hint": "server.py" + "valueHint": "server.py" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "uns_mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -4112,10 +4195,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "8b01f838-0cb6-4c17-b381-108713321d6d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "8b01f838-0cb6-4c17-b381-108713321d6d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "8b01f838-0cb6-4c17-b381-108713321d6d" } } }, @@ -4132,31 +4216,31 @@ "packages": [ { "version": "0.4.3", - "package_arguments": [ + "packageArguments": [ { "description": "Generate a financial status report about the company", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "Generate", - "value_hint": "Generate a financial status report about the company" + "valueHint": "Generate a financial status report about the company" }, { "description": "true", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "true", - "value_hint": "true" + "valueHint": "true" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@vectorize-io/vectorize-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -4164,10 +4248,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c1b727f7-1570-465f-8153-585840de260a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c1b727f7-1570-465f-8153-585840de260a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c1b727f7-1570-465f-8153-585840de260a" } } }, @@ -4184,18 +4269,18 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "Path to script file to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/verodat-mcp-server/build/src/consume.js", "default": "path/to/verodat-mcp-server/build/src/consume.js", "type": "positional", - "value_hint": "path/to/verodat-mcp-server/build/src/consume.js" + "valueHint": "path/to/verodat-mcp-server/build/src/consume.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key", "name": "VERODAT_AI_API_KEY" @@ -4205,9 +4290,9 @@ "name": "VERODAT_API_BASE_URL" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "verodat-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -4215,10 +4300,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c0c30db1-cc08-426e-886f-0bdbcd31d101", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c0c30db1-cc08-426e-886f-0bdbcd31d101", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c0c30db1-cc08-426e-886f-0bdbcd31d101" } } }, @@ -4235,9 +4321,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "veyrax-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -4245,10 +4331,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "2cc83e0a-3ca5-4e21-b346-83254cc72e1f", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "2cc83e0a-3ca5-4e21-b346-83254cc72e1f", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "2cc83e0a-3ca5-4e21-b346-83254cc72e1f" } } }, @@ -4265,18 +4352,18 @@ "packages": [ { "version": "0.0.12", - "package_arguments": [ + "packageArguments": [ { "description": "Path to MCP server entry file", - "is_required": true, + "isRequired": true, "format": "string", "value": "insert-your-file-path-here/xero-mcp-server/dist/index.js", "default": "insert-your-file-path-here/xero-mcp-server/dist/index.js", "type": "positional", - "value_hint": "insert-your-file-path-here/xero-mcp-server/dist/index.js" + "valueHint": "insert-your-file-path-here/xero-mcp-server/dist/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_client_id_here", "name": "XERO_CLIENT_ID" @@ -4286,9 +4373,9 @@ "name": "XERO_CLIENT_SECRET" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@xeroapi/xero-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -4296,10 +4383,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4bc3b6d3-666e-4bb7-8ad7-6b38bc9c5ab8", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4bc3b6d3-666e-4bb7-8ad7-6b38bc9c5ab8", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4bc3b6d3-666e-4bb7-8ad7-6b38bc9c5ab8" } } }, @@ -4316,9 +4404,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "ableton-live-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -4326,10 +4414,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "60b95692-579f-4de4-8095-1efdca5d8591", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "60b95692-579f-4de4-8095-1efdca5d8591", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "60b95692-579f-4de4-8095-1efdca5d8591" } } }, @@ -4346,9 +4435,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "ableton-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -4356,10 +4445,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "98b8992b-77cc-43a5-825e-d14270fd9ca5", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "98b8992b-77cc-43a5-825e-d14270fd9ca5", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "98b8992b-77cc-43a5-825e-d14270fd9ca5" } } }, @@ -4376,10 +4466,10 @@ "packages": [ { "version": "0.1.1", - "package_arguments": [ + "packageArguments": [ { "description": "Ignore robots.txt directives", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -4387,9 +4477,9 @@ "name": "--ignore-robots-txt" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@openbnb/mcp-server-airbnb", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -4397,10 +4487,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "1101c394-e912-42b6-85be-d2479b72d27f", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "1101c394-e912-42b6-85be-d2479b72d27f", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "1101c394-e912-42b6-85be-d2479b72d27f" } } }, @@ -4417,9 +4508,9 @@ "packages": [ { "version": "2.7.7", - "registry_type": "npm", + "registryType": "npm", "identifier": "algorand-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -4427,10 +4518,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4813a35a-7d43-42fa-999d-86e68b2aca1a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4813a35a-7d43-42fa-999d-86e68b2aca1a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4813a35a-7d43-42fa-999d-86e68b2aca1a" } } }, @@ -4447,28 +4539,28 @@ "packages": [ { "version": "0.2.2", - "package_arguments": [ + "packageArguments": [ { "description": "Directory to run the server from", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/mcp-server-apache-airflow", "default": "/path/to/mcp-server-apache-airflow", "type": "named", "name": "--directory", - "value_hint": "/path/to/mcp-server-apache-airflow" + "valueHint": "/path/to/mcp-server-apache-airflow" }, { "description": "Name of the Airflow MCP server", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp-server-apache-airflow", "default": "mcp-server-apache-airflow", "type": "positional", - "value_hint": "mcp-server-apache-airflow" + "valueHint": "mcp-server-apache-airflow" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "https://your-airflow-host", "name": "AIRFLOW_HOST" @@ -4482,9 +4574,9 @@ "name": "AIRFLOW_PASSWORD" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-apache-airflow", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -4492,10 +4584,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ae6d4cd8-c930-4737-9aba-93609f53cde1", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ae6d4cd8-c930-4737-9aba-93609f53cde1", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ae6d4cd8-c930-4737-9aba-93609f53cde1" } } }, @@ -4512,15 +4605,15 @@ "packages": [ { "version": "1.4.1", - "environment_variables": [ + "environmentVariables": [ { "description": "pat123.abc123", "name": "AIRTABLE_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "airtable-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -4528,10 +4621,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a4902ee8-060c-47d1-9dfc-ec6af1a9c398", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a4902ee8-060c-47d1-9dfc-ec6af1a9c398", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a4902ee8-060c-47d1-9dfc-ec6af1a9c398" } } }, @@ -4548,26 +4642,26 @@ "packages": [ { "version": "0.3.0", - "package_arguments": [ + "packageArguments": [ { "description": "Positional argument for the package entry point", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/airtable-mcp/build/index.js", "default": "path/to/airtable-mcp/build/index.js", "type": "positional", - "value_hint": "path/to/airtable-mcp/build/index.js" + "valueHint": "path/to/airtable-mcp/build/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_key_here", "name": "AIRTABLE_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@felores/airtable-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -4575,10 +4669,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "04216a87-0760-4f25-b809-42ffbfbb8962", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "04216a87-0760-4f25-b809-42ffbfbb8962", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "04216a87-0760-4f25-b809-42ffbfbb8962" } } }, @@ -4595,9 +4690,9 @@ "packages": [ { "version": "0.3.10", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "alphavantage", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -4605,10 +4700,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "cac9fd2a-2c08-441f-a94d-16c67821221f", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "cac9fd2a-2c08-441f-a94d-16c67821221f", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "cac9fd2a-2c08-441f-a94d-16c67821221f" } } }, @@ -4625,9 +4721,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-amadeus", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -4635,10 +4731,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ad6e04de-5f80-4274-9464-c6bbff533ad3", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ad6e04de-5f80-4274-9464-c6bbff533ad3", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ad6e04de-5f80-4274-9464-c6bbff533ad3" } } }, @@ -4655,30 +4752,30 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Directory flag and its value", - "is_required": true, + "isRequired": true, "format": "string", "value": "{{PATH_TO_SRC}}/aranet4-mcp-server/", "default": "{{PATH_TO_SRC}}/aranet4-mcp-server/", "type": "named", "name": "--directory", - "value_hint": "{{PATH_TO_SRC}}/aranet4-mcp-server/" + "valueHint": "{{PATH_TO_SRC}}/aranet4-mcp-server/" }, { "description": "Python server file", - "is_required": true, + "isRequired": true, "format": "string", "value": "src/server.py", "default": "src/server.py", "type": "positional", - "value_hint": "src/server.py" + "valueHint": "src/server.py" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "aranet4-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -4686,10 +4783,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "775bd83c-b33a-471c-9deb-8a444fb4ac79", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "775bd83c-b33a-471c-9deb-8a444fb4ac79", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "775bd83c-b33a-471c-9deb-8a444fb4ac79" } } }, @@ -4706,7 +4804,7 @@ "packages": [ { "version": "0.4.4", - "environment_variables": [ + "environmentVariables": [ { "description": "your_database_url", "name": "ARANGO_URL" @@ -4724,9 +4822,9 @@ "name": "ARANGO_PASSWORD" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "arango-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -4734,10 +4832,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "1e97b930-031a-47b6-afb1-8af61dd81ec0", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "1e97b930-031a-47b6-afb1-8af61dd81ec0", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "1e97b930-031a-47b6-afb1-8af61dd81ec0" } } }, @@ -4754,9 +4853,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "choturoboserver", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -4764,10 +4863,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "466926d1-72a6-42be-b2c1-ef94d44e5a67", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "466926d1-72a6-42be-b2c1-ef94d44e5a67", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "466926d1-72a6-42be-b2c1-ef94d44e5a67" } } }, @@ -4784,9 +4884,9 @@ "packages": [ { "version": "0.10.6", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-atlassian", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -4794,10 +4894,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4df1406c-1bb1-4495-96e8-8c25de454b5d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4df1406c-1bb1-4495-96e8-8c25de454b5d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4df1406c-1bb1-4495-96e8-8c25de454b5d" } } }, @@ -4814,9 +4915,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "attestable-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -4824,10 +4925,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "05ca6ccc-d6e1-47ab-ab8d-25949db9ada7", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "05ca6ccc-d6e1-47ab-ab8d-25949db9ada7", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "05ca6ccc-d6e1-47ab-ab8d-25949db9ada7" } } }, @@ -4844,9 +4946,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-aws", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -4854,10 +4956,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "e9799403-3917-4c38-9638-c69aebf1ac08", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "e9799403-3917-4c38-9638-c69aebf1ac08", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "e9799403-3917-4c38-9638-c69aebf1ac08" } } }, @@ -4874,31 +4977,31 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "Named argument for query identifier", - "is_required": true, + "isRequired": true, "format": "string", "value": "abcd-1234-efgh-5678", "default": "abcd-1234-efgh-5678", "type": "named", "name": "--namedQueryId", - "value_hint": "abcd-1234-efgh-5678" + "valueHint": "abcd-1234-efgh-5678" }, { "description": "Named argument for maximum rows", - "is_required": true, + "isRequired": true, "format": "string", "value": "100", "default": "100", "type": "named", "name": "--maxRows", - "value_hint": "100" + "valueHint": "100" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@lishenxydlgzs/aws-athena-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -4906,10 +5009,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d3139564-f4c3-44f9-902a-8d172038af01", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d3139564-f4c3-44f9-902a-8d172038af01", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d3139564-f4c3-44f9-902a-8d172038af01" } } }, @@ -4926,10 +5030,10 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Keep STDIN open even if not attached", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -4938,7 +5042,7 @@ }, { "description": "Automatically remove the container when it exits", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -4947,37 +5051,37 @@ }, { "description": "Set environment variables in the container", - "is_required": true, + "isRequired": true, "format": "string", "value": "AWS_PROFILE=default", "default": "AWS_PROFILE=default", "type": "named", "name": "-e", - "value_hint": "AWS_PROFILE=default" + "valueHint": "AWS_PROFILE=default" }, { "description": "Bind mount a volume", - "is_required": true, + "isRequired": true, "format": "string", "value": "~/.aws:/root/.aws", "default": "~/.aws:/root/.aws", "type": "named", "name": "-v", - "value_hint": "~/.aws:/root/.aws" + "valueHint": "~/.aws:/root/.aws" }, { "description": "Docker image name with tag", - "is_required": true, + "isRequired": true, "format": "string", "value": "buryhuang/mcp-server-aws-resources:latest", "default": "buryhuang/mcp-server-aws-resources:latest", "type": "positional", - "value_hint": "buryhuang/mcp-server-aws-resources:latest" + "valueHint": "buryhuang/mcp-server-aws-resources:latest" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-aws-resources", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -4985,10 +5089,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6dd26dd7-d5c3-4aa8-bb9a-3aba328790ad", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6dd26dd7-d5c3-4aa8-bb9a-3aba328790ad", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6dd26dd7-d5c3-4aa8-bb9a-3aba328790ad" } } }, @@ -5005,9 +5110,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "s3-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -5015,10 +5120,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "f7f8acea-8725-48ec-a2f8-08ee16c738db", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "f7f8acea-8725-48ec-a2f8-08ee16c738db", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "f7f8acea-8725-48ec-a2f8-08ee16c738db" } } }, @@ -5035,88 +5141,88 @@ "packages": [ { "version": "1.0.9", - "package_arguments": [ + "packageArguments": [ { "description": "Remove container after exit", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--rm", - "value_hint": "--rm" + "valueHint": "--rm" }, { "description": "Keep STDIN open even if not attached", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "-i", - "value_hint": "-i" + "valueHint": "-i" }, { "description": "Set environment variable in container: ADX_CLUSTER_URL", - "is_required": true, + "isRequired": true, "format": "string", "value": "ADX_CLUSTER_URL", "default": "ADX_CLUSTER_URL", "type": "named", "name": "-e", - "value_hint": "ADX_CLUSTER_URL" + "valueHint": "ADX_CLUSTER_URL" }, { "description": "Set environment variable in container: ADX_DATABASE", - "is_required": true, + "isRequired": true, "format": "string", "value": "ADX_DATABASE", "default": "ADX_DATABASE", "type": "named", "name": "-e", - "value_hint": "ADX_DATABASE" + "valueHint": "ADX_DATABASE" }, { "description": "Set environment variable in container: AZURE_TENANT_ID", - "is_required": true, + "isRequired": true, "format": "string", "value": "AZURE_TENANT_ID", "default": "AZURE_TENANT_ID", "type": "named", "name": "-e", - "value_hint": "AZURE_TENANT_ID" + "valueHint": "AZURE_TENANT_ID" }, { "description": "Set environment variable in container: AZURE_CLIENT_ID", - "is_required": true, + "isRequired": true, "format": "string", "value": "AZURE_CLIENT_ID", "default": "AZURE_CLIENT_ID", "type": "named", "name": "-e", - "value_hint": "AZURE_CLIENT_ID" + "valueHint": "AZURE_CLIENT_ID" }, { "description": "Set environment variable in container: ADX_TOKEN_FILE_PATH", - "is_required": true, + "isRequired": true, "format": "string", "value": "ADX_TOKEN_FILE_PATH", "default": "ADX_TOKEN_FILE_PATH", "type": "named", "name": "-e", - "value_hint": "ADX_TOKEN_FILE_PATH" + "valueHint": "ADX_TOKEN_FILE_PATH" }, { "description": "Container image to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "adx-mcp-server", "default": "adx-mcp-server", "type": "positional", - "value_hint": "adx-mcp-server" + "valueHint": "adx-mcp-server" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "https://yourcluster.region.kusto.windows.net", "name": "ADX_CLUSTER_URL" @@ -5138,9 +5244,9 @@ "name": "ADX_TOKEN_FILE_PATH" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "adx_mcp_server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -5148,10 +5254,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "bb734a22-a274-48ee-9740-d4a6a9a0a367", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "bb734a22-a274-48ee-9740-d4a6a9a0a367", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "bb734a22-a274-48ee-9740-d4a6a9a0a367" } } }, @@ -5168,9 +5275,9 @@ "packages": [ { "version": "0.6.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-azure-devops", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -5178,10 +5285,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4502246b-f419-4879-a179-149c6d87a871", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4502246b-f419-4879-a179-149c6d87a871", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4502246b-f419-4879-a179-149c6d87a871" } } }, @@ -5198,7 +5306,7 @@ "packages": [ { "version": "0.1.5", - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_COINBASE_CDP_API_KEY_NAME", "name": "COINBASE_CDP_API_KEY_NAME" @@ -5208,9 +5316,9 @@ "name": "COINBASE_CDP_PRIVATE_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@magnetai/free-usdc-transfer", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -5218,10 +5326,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c3123664-33b3-4f29-bc08-40b88300f57c", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c3123664-33b3-4f29-bc08-40b88300f57c", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c3123664-33b3-4f29-bc08-40b88300f57c" } } }, @@ -5238,19 +5347,19 @@ "packages": [ { "version": "0.12.3", - "package_arguments": [ + "packageArguments": [ { - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp", "default": "mcp", "type": "positional", - "value_hint": "mcp" + "valueHint": "mcp" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "basic-memory", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -5258,10 +5367,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "377dba9b-63cc-4ca9-bb39-97f5e12497b4", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "377dba9b-63cc-4ca9-bb39-97f5e12497b4", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "377dba9b-63cc-4ca9-bb39-97f5e12497b4" } } }, @@ -5278,9 +5388,9 @@ "packages": [ { "version": "0.2.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-bigquery", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -5288,10 +5398,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "0e517488-6e73-41c3-a297-7602f5937079", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "0e517488-6e73-41c3-a297-7602f5937079", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "0e517488-6e73-41c3-a297-7602f5937079" } } }, @@ -5308,41 +5419,41 @@ "packages": [ { "version": "1.0.3", - "package_arguments": [ + "packageArguments": [ { "description": "--project-id your-project-id", - "is_required": true, + "isRequired": true, "format": "string", "value": "your-project-id", "default": "your-project-id", "type": "named", "name": "--project-id", - "value_hint": "your-project-id" + "valueHint": "your-project-id" }, { "description": "--location us-central1", - "is_required": true, + "isRequired": true, "format": "string", "value": "us-central1", "default": "us-central1", "type": "named", "name": "--location", - "value_hint": "us-central1" + "valueHint": "us-central1" }, { "description": "--key-file /path/to/service-account-key.json", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/service-account-key.json", "default": "/path/to/service-account-key.json", "type": "named", "name": "--key-file", - "value_hint": "/path/to/service-account-key.json" + "valueHint": "/path/to/service-account-key.json" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@ergut/mcp-bigquery-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -5350,10 +5461,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "e3053bd5-1a4d-473c-a41b-f83ab1a46174", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "e3053bd5-1a4d-473c-a41b-f83ab1a46174", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "e3053bd5-1a4d-473c-a41b-f83ab1a46174" } } }, @@ -5370,15 +5482,15 @@ "packages": [ { "version": "0.1.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your-bing-api-key", "name": "BING_API_KEY" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp_server_bing", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -5386,10 +5498,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a0db598f-81d1-44d6-9008-e9a71e742cd3", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a0db598f-81d1-44d6-9008-e9a71e742cd3", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a0db598f-81d1-44d6-9008-e9a71e742cd3" } } }, @@ -5406,19 +5519,19 @@ "packages": [ { "version": "0.2.1", - "package_arguments": [ + "packageArguments": [ { "description": "-m bitable_mcp", - "is_required": true, + "isRequired": true, "format": "string", "value": "bitable_mcp", "default": "bitable_mcp", "type": "named", "name": "-m", - "value_hint": "bitable_mcp" + "valueHint": "bitable_mcp" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your-personal-base-token", "name": "PERSONAL_BASE_TOKEN" @@ -5428,9 +5541,9 @@ "name": "APP_TOKEN" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "bitable-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -5438,10 +5551,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4a33ebab-f5cf-48b3-adb3-3f7094ea706c", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4a33ebab-f5cf-48b3-adb3-3f7094ea706c", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4a33ebab-f5cf-48b3-adb3-3f7094ea706c" } } }, @@ -5458,27 +5572,27 @@ "packages": [ { "version": "1.1.3", - "package_arguments": [ + "packageArguments": [ { - "is_required": true, + "isRequired": true, "format": "string", "value": "uvx", "default": "uvx", "type": "positional", - "value_hint": "uvx" + "valueHint": "uvx" }, { - "is_required": true, + "isRequired": true, "format": "string", "value": "blender-mcp", "default": "blender-mcp", "type": "positional", - "value_hint": "blender-mcp" + "valueHint": "blender-mcp" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "blender-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -5486,10 +5600,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "fd341719-247e-45e8-a911-ad7c336eb163", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "fd341719-247e-45e8-a911-ad7c336eb163", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "fd341719-247e-45e8-a911-ad7c336eb163" } } }, @@ -5506,9 +5621,9 @@ "packages": [ { "version": "1.0.3", - "registry_type": "npm", + "registryType": "npm", "identifier": "@agree-able/room-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -5516,10 +5631,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b9bf1c69-4a64-47ec-a781-fb81d1922695", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b9bf1c69-4a64-47ec-a781-fb81d1922695", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b9bf1c69-4a64-47ec-a781-fb81d1922695" } } }, @@ -5536,29 +5652,29 @@ "packages": [ { "version": "1.0.3", - "package_arguments": [ + "packageArguments": [ { "description": "server", - "is_required": true, + "isRequired": true, "format": "string", "value": "server", "default": "server", "type": "positional", - "value_hint": "server" + "valueHint": "server" }, { "description": "--port 8000", - "is_required": true, + "isRequired": true, "format": "string", "value": "8000", "default": "8000", "type": "named", "name": "--port", - "value_hint": "8000" + "valueHint": "8000" }, { "description": "--stdio", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -5567,24 +5683,24 @@ }, { "description": "--proxy-port 9000", - "is_required": true, + "isRequired": true, "format": "string", "value": "9000", "default": "9000", "type": "named", "name": "--proxy-port", - "value_hint": "9000" + "valueHint": "9000" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key", "name": "OPENAI_API_KEY" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "browser-use-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -5592,10 +5708,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "27b05d20-fd9c-437d-a86c-923629491ff5", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "27b05d20-fd9c-437d-a86c-923629491ff5", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "27b05d20-fd9c-437d-a86c-923629491ff5" } } }, @@ -5612,9 +5729,9 @@ "packages": [ { "version": "1.0.12", - "registry_type": "npm", + "registryType": "npm", "identifier": "bnbchain-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -5622,10 +5739,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "36156772-6775-4b79-b560-b72ccaaca085", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "36156772-6775-4b79-b560-b72ccaaca085", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "36156772-6775-4b79-b560-b72ccaaca085" } } }, @@ -5642,9 +5760,9 @@ "packages": [ { "version": "0.2.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-calculator", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -5652,10 +5770,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "87cf029b-441f-439a-aae9-9ef27ddd4322", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "87cf029b-441f-439a-aae9-9ef27ddd4322", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "87cf029b-441f-439a-aae9-9ef27ddd4322" } } }, @@ -5672,20 +5791,20 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "Path to the working directory", - "is_required": true, + "isRequired": true, "format": "string", "value": "D:/Github/mcp-test", "default": "D:/Github/mcp-test", "type": "positional", - "value_hint": "D:/Github/mcp-test" + "valueHint": "D:/Github/mcp-test" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "aiql-desktop", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -5693,10 +5812,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "16fc441d-0d72-4b14-afd7-d5c9dd25c909", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "16fc441d-0d72-4b14-afd7-d5c9dd25c909", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "16fc441d-0d72-4b14-afd7-d5c9dd25c909" } } }, @@ -5713,15 +5833,15 @@ "packages": [ { "version": "0.1.0", - "environment_variables": [ + "environmentVariables": [ { "description": "path-to/mcp-server-chatsum/chatbot/data/chat.db", "name": "CHAT_DB_PATH" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-chatsum", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -5729,10 +5849,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "196a8cbd-8234-4336-a4d7-f6dda870bcfb", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "196a8cbd-8234-4336-a4d7-f6dda870bcfb", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "196a8cbd-8234-4336-a4d7-f6dda870bcfb" } } }, @@ -5749,30 +5870,30 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Named argument", - "is_required": true, + "isRequired": true, "format": "string", "value": "C:/MCP/server/community/chroma", "default": "C:/MCP/server/community/chroma", "type": "named", "name": "--directory", - "value_hint": "C:/MCP/server/community/chroma" + "valueHint": "C:/MCP/server/community/chroma" }, { "description": "Positional argument", - "is_required": true, + "isRequired": true, "format": "string", "value": "chroma", "default": "chroma", "type": "positional", - "value_hint": "chroma" + "valueHint": "chroma" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "chroma", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -5780,10 +5901,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4b637a92-c1af-463d-afc1-e0ce65d7c057", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4b637a92-c1af-463d-afc1-e0ce65d7c057", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4b637a92-c1af-463d-afc1-e0ce65d7c057" } } }, @@ -5800,30 +5922,30 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Directory to execute the command in", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/claude-post/src/email_client", "default": "/path/to/claude-post/src/email_client", "type": "named", "name": "--directory", - "value_hint": "/path/to/claude-post/src/email_client" + "valueHint": "/path/to/claude-post/src/email_client" }, { "description": "Name of the email client script", - "is_required": true, + "isRequired": true, "format": "string", "value": "email-client", "default": "email-client", "type": "positional", - "value_hint": "email-client" + "valueHint": "email-client" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "email_client", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -5831,10 +5953,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "3b404956-9bad-4bd9-89a9-17534b4bd22e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "3b404956-9bad-4bd9-89a9-17534b4bd22e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "3b404956-9bad-4bd9-89a9-17534b4bd22e" } } }, @@ -5851,7 +5974,7 @@ "packages": [ { "version": "0.7.2", - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key", "name": "CLICKUP_API_KEY" @@ -5869,9 +5992,9 @@ "name": "PORT" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@taazkareem/clickup-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -5879,10 +6002,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "34b93e72-0fa8-4dbe-ae9b-82a9e40de735", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "34b93e72-0fa8-4dbe-ae9b-82a9e40de735", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "34b93e72-0fa8-4dbe-ae9b-82a9e40de735" } } }, @@ -5899,18 +6023,18 @@ "packages": [ { "version": "1.1.3", - "package_arguments": [ + "packageArguments": [ { "description": "Path to the package entrypoint", - "is_required": true, + "isRequired": true, "format": "string", "value": "c:/path/to/cloudinary-mcp-server/dist/index.js", "default": "c:/path/to/cloudinary-mcp-server/dist/index.js", "type": "positional", - "value_hint": "c:/path/to/cloudinary-mcp-server/dist/index.js" + "valueHint": "c:/path/to/cloudinary-mcp-server/dist/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_cloud_name", "name": "CLOUDINARY_CLOUD_NAME" @@ -5924,9 +6048,9 @@ "name": "CLOUDINARY_API_SECRET" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@felores/cloudinary-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -5934,10 +6058,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7baddfbe-3618-41d8-befe-40fc2aabcd8e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7baddfbe-3618-41d8-befe-40fc2aabcd8e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7baddfbe-3618-41d8-befe-40fc2aabcd8e" } } }, @@ -5954,20 +6079,20 @@ "packages": [ { "version": "0.2.0", - "package_arguments": [ + "packageArguments": [ { "description": "file_path positional argument for the code file to be read", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/code/storage/my_script_abc123.py", "default": "/path/to/code/storage/my_script_abc123.py", "type": "positional", - "value_hint": "/path/to/code/storage/my_script_abc123.py" + "valueHint": "/path/to/code/storage/my_script_abc123.py" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "code_execution_server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -5975,10 +6100,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "0cdfed38-6495-42a3-a837-3788f35aadd3", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "0cdfed38-6495-42a3-a837-3788f35aadd3", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "0cdfed38-6495-42a3-a837-3788f35aadd3" } } }, @@ -5995,9 +6121,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "consul-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -6005,10 +6131,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a9fe34f1-7c82-4f7d-8fbe-20bb8ca29e7b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a9fe34f1-7c82-4f7d-8fbe-20bb8ca29e7b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a9fe34f1-7c82-4f7d-8fbe-20bb8ca29e7b" } } }, @@ -6025,9 +6152,9 @@ "packages": [ { "version": "0.1.40", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "cognee", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -6035,10 +6162,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ae9ce022-800d-4a10-a452-5bc396d25430", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ae9ce022-800d-4a10-a452-5bc396d25430", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ae9ce022-800d-4a10-a452-5bc396d25430" } } }, @@ -6055,27 +6183,27 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "-m coin_api_mcp", - "is_required": true, + "isRequired": true, "format": "string", "value": "coin_api_mcp", "default": "coin_api_mcp", "type": "named", "name": "-m", - "value_hint": "coin_api_mcp" + "valueHint": "coin_api_mcp" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_key_here", "name": "COINMARKETCAP_API_KEY" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "coin-api-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -6083,10 +6211,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "28fc08e1-1afc-42cb-8eca-0b500e23c73e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "28fc08e1-1afc-42cb-8eca-0b500e23c73e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "28fc08e1-1afc-42cb-8eca-0b500e23c73e" } } }, @@ -6103,9 +6232,9 @@ "packages": [ { "version": "1.3.7", - "registry_type": "npm", + "registryType": "npm", "identifier": "@shinzolabs/coinmarketcap-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -6113,10 +6242,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7e3a17ce-fbbd-48cb-b29f-34a4b8c6ca55", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7e3a17ce-fbbd-48cb-b29f-34a4b8c6ca55", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7e3a17ce-fbbd-48cb-b29f-34a4b8c6ca55" } } }, @@ -6133,60 +6263,60 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Pass environment variable MACOS_USERNAME", - "is_required": true, + "isRequired": true, "format": "string", "value": "MACOS_USERNAME=your_macos_username", "default": "MACOS_USERNAME=your_macos_username", "type": "named", "name": "-e", - "value_hint": "MACOS_USERNAME=your_macos_username" + "valueHint": "MACOS_USERNAME=your_macos_username" }, { "description": "Pass environment variable MACOS_PASSWORD", - "is_required": true, + "isRequired": true, "format": "string", "value": "MACOS_PASSWORD=your_macos_password", "default": "MACOS_PASSWORD=your_macos_password", "type": "named", "name": "-e", - "value_hint": "MACOS_PASSWORD=your_macos_password" + "valueHint": "MACOS_PASSWORD=your_macos_password" }, { "description": "Pass environment variable MACOS_HOST", - "is_required": true, + "isRequired": true, "format": "string", "value": "MACOS_HOST=your_macos_hostname_or_ip", "default": "MACOS_HOST=your_macos_hostname_or_ip", "type": "named", "name": "-e", - "value_hint": "MACOS_HOST=your_macos_hostname_or_ip" + "valueHint": "MACOS_HOST=your_macos_hostname_or_ip" }, { "description": "Remove container when it exits", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--rm", - "value_hint": "--rm" + "valueHint": "--rm" }, { "description": "Docker image to use", - "is_required": true, + "isRequired": true, "format": "string", "value": "buryhuang/mcp-remote-macos-use:latest", "default": "buryhuang/mcp-remote-macos-use:latest", "type": "positional", - "value_hint": "buryhuang/mcp-remote-macos-use:latest" + "valueHint": "buryhuang/mcp-remote-macos-use:latest" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp_remote_macos_use", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -6194,10 +6324,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "5e32ec37-7a46-4e84-9f19-845cd6b151f4", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "5e32ec37-7a46-4e84-9f19-845cd6b151f4", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "5e32ec37-7a46-4e84-9f19-845cd6b151f4" } } }, @@ -6214,31 +6345,31 @@ "packages": [ { "version": "1.14.0", - "package_arguments": [ + "packageArguments": [ { "description": "Management token for Contentful", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--management-token", - "value_hint": "" + "valueHint": "" }, { "description": "Contentful API host address", - "is_required": true, + "isRequired": true, "format": "string", "value": "http://api.contentful.com", "default": "http://api.contentful.com", "type": "named", "name": "--host", - "value_hint": "http://api.contentful.com" + "valueHint": "http://api.contentful.com" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@ivotoby/contentful-management-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -6246,10 +6377,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "347d6881-c509-4dca-9ece-95e25098436b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "347d6881-c509-4dca-9ece-95e25098436b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "347d6881-c509-4dca-9ece-95e25098436b" } } }, @@ -6266,9 +6398,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "crypto-feargreed-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -6276,10 +6408,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "45ee52ba-1e4c-48a5-9eef-de7a234997db", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "45ee52ba-1e4c-48a5-9eef-de7a234997db", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "45ee52ba-1e4c-48a5-9eef-de7a234997db" } } }, @@ -6296,26 +6429,26 @@ "packages": [ { "version": "1.0.1", - "package_arguments": [ + "packageArguments": [ { "description": "Positional argument: path/to/crypto-indicators-mcp/index.js", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/crypto-indicators-mcp/index.js", "default": "path/to/crypto-indicators-mcp/index.js", "type": "positional", - "value_hint": "path/to/crypto-indicators-mcp/index.js" + "valueHint": "path/to/crypto-indicators-mcp/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "binance", "name": "EXCHANGE_NAME" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "crypto-indicators-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -6323,10 +6456,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "0852caec-a861-4f9c-9e94-a7c8b67a1641", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "0852caec-a861-4f9c-9e94-a7c8b67a1641", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "0852caec-a861-4f9c-9e94-a7c8b67a1641" } } }, @@ -6343,9 +6477,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "cryptopanic-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -6353,10 +6487,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "91f75500-0051-4d05-a5b2-9a87aa52ec3a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "91f75500-0051-4d05-a5b2-9a87aa52ec3a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "91f75500-0051-4d05-a5b2-9a87aa52ec3a" } } }, @@ -6373,15 +6508,15 @@ "packages": [ { "version": "0.3.2", - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_API_KEY_HERE", "name": "DAPPIER_API_KEY" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "dappier-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -6389,10 +6524,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "58b5f6c8-1ad7-4378-9921-7b9b7982c84c", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "58b5f6c8-1ad7-4378-9921-7b9b7982c84c", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "58b5f6c8-1ad7-4378-9921-7b9b7982c84c" } } }, @@ -6409,61 +6545,61 @@ "packages": [ { "version": "1.0.8", - "package_arguments": [ + "packageArguments": [ { "description": "", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--apiKey", - "value_hint": "" + "valueHint": "" }, { "description": "", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--appKey", - "value_hint": "" + "valueHint": "" }, { "description": "", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--site", - "value_hint": "" + "valueHint": "" }, { "description": "", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--logsSite", - "value_hint": "" + "valueHint": "" }, { "description": "", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--metricsSite", - "value_hint": "" + "valueHint": "" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "datadog-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -6471,10 +6607,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "24f2d280-583d-4511-af0c-47910fc52c4d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "24f2d280-583d-4511-af0c-47910fc52c4d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "24f2d280-583d-4511-af0c-47910fc52c4d" } } }, @@ -6491,9 +6628,9 @@ "packages": [ { "version": "0.1.6", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-ds", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -6501,10 +6638,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "14074b80-f3a7-4b45-97ba-7204c92c5f6e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "14074b80-f3a7-4b45-97ba-7204c92c5f6e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "14074b80-f3a7-4b45-97ba-7204c92c5f6e" } } }, @@ -6521,19 +6659,19 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { - "is_required": true, + "isRequired": true, "format": "string", "value": "dataset-viewer", "default": "dataset-viewer", "type": "positional", - "value_hint": "dataset-viewer" + "valueHint": "dataset-viewer" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "dataset-viewer", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -6541,10 +6679,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "200d7310-6d18-4b22-98b3-68ae63ea985a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "200d7310-6d18-4b22-98b3-68ae63ea985a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "200d7310-6d18-4b22-98b3-68ae63ea985a" } } }, @@ -6561,20 +6700,20 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "--experimental-specifier-resolution=node", - "is_required": true, + "isRequired": true, "format": "string", "value": "node", "default": "node", "type": "named", "name": "--experimental-specifier-resolution", - "value_hint": "node" + "valueHint": "node" }, { "description": "--experimental-modules", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -6583,24 +6722,24 @@ }, { "description": "--max-old-space-size=4096", - "is_required": true, + "isRequired": true, "format": "string", "value": "4096", "default": "4096", "type": "named", "name": "--max-old-space-size", - "value_hint": "4096" + "valueHint": "4096" }, { "description": "/Users/[your-name]/.deebo/build/index.js", - "is_required": true, + "isRequired": true, "format": "string", "value": "/Users/[your-name]/.deebo/build/index.js", "default": "/Users/[your-name]/.deebo/build/index.js", "type": "positional" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "development", "name": "NODE_ENV" @@ -6630,9 +6769,9 @@ "name": "OPENROUTER_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "deebo-prototype", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -6640,10 +6779,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ec2849c6-e8ed-46b1-8e57-646fd2e8be93", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ec2849c6-e8ed-46b1-8e57-646fd2e8be93", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ec2849c6-e8ed-46b1-8e57-646fd2e8be93" } } }, @@ -6660,9 +6800,9 @@ "packages": [ { "version": "0.1.1", - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-deep-research", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -6670,10 +6810,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "79f72036-83ee-4420-9767-980e27590e6f", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "79f72036-83ee-4420-9767-980e27590e6f", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "79f72036-83ee-4420-9767-980e27590e6f" } } }, @@ -6690,15 +6831,15 @@ "packages": [ { "version": "0.2.1", - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key", "name": "DEEPSEEK_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "deepseek-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -6706,10 +6847,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "345bf964-02ce-4814-b37f-52c2e73ab395", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "345bf964-02ce-4814-b37f-52c2e73ab395", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "345bf964-02ce-4814-b37f-52c2e73ab395" } } }, @@ -6726,15 +6868,15 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key", "name": "DEEPSEEK_API_KEY" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "deepseek_r1", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -6742,10 +6884,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a2015046-780d-421a-999f-c52c808236fa", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a2015046-780d-421a-999f-c52c808236fa", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a2015046-780d-421a-999f-c52c808236fa" } } }, @@ -6762,7 +6905,7 @@ "packages": [ { "version": "1.0.2", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "API_KEY" @@ -6772,9 +6915,9 @@ "name": "BASE_URL" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "deepseek-thinker-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -6782,10 +6925,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "883a7c72-e6ca-41cb-91e9-e65436a58729", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "883a7c72-e6ca-41cb-91e9-e65436a58729", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "883a7c72-e6ca-41cb-91e9-e65436a58729" } } }, @@ -6802,7 +6946,7 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your-descope-project-id-here", "name": "DESCOPE_PROJECT_ID" @@ -6812,9 +6956,9 @@ "name": "DESCOPE_MANAGEMENT_KEY" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "descope-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -6822,10 +6966,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "bac14e5d-08c4-4b69-8e40-b845632d26ed", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "bac14e5d-08c4-4b69-8e40-b845632d26ed", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "bac14e5d-08c4-4b69-8e40-b845632d26ed" } } }, @@ -6842,9 +6987,9 @@ "packages": [ { "version": "0.1.1", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "devrev-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -6852,10 +6997,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "8b17658e-2a1b-4ca7-a1ae-583e7b190bce", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "8b17658e-2a1b-4ca7-a1ae-583e7b190bce", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "8b17658e-2a1b-4ca7-a1ae-583e7b190bce" } } }, @@ -6872,39 +7018,39 @@ "packages": [ { "version": "0.1.1", - "package_arguments": [ + "packageArguments": [ { "description": "Specify the directory to operate in", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/cloned/dicom-mcp", "default": "path/to/cloned/dicom-mcp", "type": "named", "name": "--directory", - "value_hint": "path/to/cloned/dicom-mcp" + "valueHint": "path/to/cloned/dicom-mcp" }, { "description": "Script or module to execute", - "is_required": true, + "isRequired": true, "format": "string", "value": "dicom-mcp", "default": "dicom-mcp", "type": "positional", - "value_hint": "dicom-mcp" + "valueHint": "dicom-mcp" }, { "description": "Path to the configuration YAML file", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/your_config.yaml", "default": "/path/to/your_config.yaml", "type": "positional", - "value_hint": "/path/to/your_config.yaml" + "valueHint": "/path/to/your_config.yaml" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "dicom-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -6912,10 +7058,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c83f2ca0-ca97-43cf-8288-5ff4a0771e29", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c83f2ca0-ca97-43cf-8288-5ff4a0771e29", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c83f2ca0-ca97-43cf-8288-5ff4a0771e29" } } }, @@ -6932,9 +7079,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "discord-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -6942,10 +7089,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "361ed7f4-8df4-4a8e-931f-edfb380e0019", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "361ed7f4-8df4-4a8e-931f-edfb380e0019", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "361ed7f4-8df4-4a8e-931f-edfb380e0019" } } }, @@ -6962,7 +7110,7 @@ "packages": [ { "version": "1.0.2", - "environment_variables": [ + "environmentVariables": [ { "description": "https://try.discourse.org", "name": "DISCOURSE_API_URL" @@ -6976,9 +7124,9 @@ "name": "DISCOURSE_API_USERNAME" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@ashdev/discourse-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -6986,10 +7134,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "dedc68af-03ef-49ce-a331-e4717b96f693", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "dedc68af-03ef-49ce-a331-e4717b96f693", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "dedc68af-03ef-49ce-a331-e4717b96f693" } } }, @@ -7006,9 +7155,9 @@ "packages": [ { "version": "0.2.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-docker", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -7016,10 +7165,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d2aacd5b-0642-4832-8629-58272a922e4b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d2aacd5b-0642-4832-8629-58272a922e4b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d2aacd5b-0642-4832-8629-58272a922e4b" } } }, @@ -7036,9 +7186,9 @@ "packages": [ { "version": "1.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-dblp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -7046,10 +7196,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "5a9955bc-6c28-4ebd-974e-73226eb3e58f", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "5a9955bc-6c28-4ebd-974e-73226eb3e58f", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "5a9955bc-6c28-4ebd-974e-73226eb3e58f" } } }, @@ -7066,9 +7217,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "Omedia/mcp-server-drupal", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -7076,10 +7227,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7902d399-3080-4926-afb8-4f98c3a7d870", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7902d399-3080-4926-afb8-4f98c3a7d870", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7902d399-3080-4926-afb8-4f98c3a7d870" } } }, @@ -7096,9 +7248,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "dune-analytics-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -7106,10 +7258,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "2d851046-40f2-4088-95df-d6c0f93c2f0a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "2d851046-40f2-4088-95df-d6c0f93c2f0a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "2d851046-40f2-4088-95df-d6c0f93c2f0a" } } }, @@ -7126,9 +7279,9 @@ "packages": [ { "version": "0.0.9", - "registry_type": "npm", + "registryType": "npm", "identifier": "edgeone-pages-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7136,10 +7289,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "f97607ba-eb50-4258-b46c-ce9fc6587fa9", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "f97607ba-eb50-4258-b46c-ce9fc6587fa9", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "f97607ba-eb50-4258-b46c-ce9fc6587fa9" } } }, @@ -7156,9 +7310,9 @@ "packages": [ { "version": "0.8.29", - "registry_type": "npm", + "registryType": "npm", "identifier": "edwin-sdk", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7166,10 +7320,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "995ac56a-5ec7-4411-a86c-4ebfef9c9605", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "995ac56a-5ec7-4411-a86c-4ebfef9c9605", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "995ac56a-5ec7-4411-a86c-4ebfef9c9605" } } }, @@ -7186,28 +7341,28 @@ "packages": [ { "version": "0.1.1", - "package_arguments": [ + "packageArguments": [ { "description": "Flag to specify a directory for the server", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/elevenlabs-mcp-server", "default": "path/to/elevenlabs-mcp-server", "type": "named", "name": "--directory", - "value_hint": "path/to/elevenlabs-mcp-server" + "valueHint": "path/to/elevenlabs-mcp-server" }, { "description": "Positional argument specifying the target server to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "elevenlabs-mcp-server", "default": "elevenlabs-mcp-server", "type": "positional", - "value_hint": "elevenlabs-mcp-server" + "valueHint": "elevenlabs-mcp-server" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key", "name": "ELEVENLABS_API_KEY" @@ -7237,9 +7392,9 @@ "name": "ELEVENLABS_OUTPUT_DIR" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "elevenlabs-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -7247,10 +7402,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "1d89482a-a7de-4d3b-a7cb-1b7be49939ec", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "1d89482a-a7de-4d3b-a7cb-1b7be49939ec", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "1d89482a-a7de-4d3b-a7cb-1b7be49939ec" } } }, @@ -7267,9 +7423,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-email", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -7277,10 +7433,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c0a64e6c-2ff2-4a2f-afe6-f52119a020a0", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c0a64e6c-2ff2-4a2f-afe6-f52119a020a0", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c0a64e6c-2ff2-4a2f-afe6-f52119a020a0" } } }, @@ -7297,9 +7454,9 @@ "packages": [ { "version": "0.0.2", - "registry_type": "oci", + "registryType": "oci", "identifier": "eunomia-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -7307,10 +7464,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "35e1e1a0-30c9-4857-a9e0-5c64f7e29fa9", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "35e1e1a0-30c9-4857-a9e0-5c64f7e29fa9", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "35e1e1a0-30c9-4857-a9e0-5c64f7e29fa9" } } }, @@ -7327,9 +7485,9 @@ "packages": [ { "version": "1.1.3", - "registry_type": "npm", + "registryType": "npm", "identifier": "@mcpdotdirect/evm-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7337,10 +7495,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "e944c7a9-9eb0-495a-8bee-d8da751240e7", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "e944c7a9-9eb0-495a-8bee-d8da751240e7", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "e944c7a9-9eb0-495a-8bee-d8da751240e7" } } }, @@ -7357,36 +7516,36 @@ "packages": [ { "version": "0.2.1", - "package_arguments": [ + "packageArguments": [ { "description": "Sets the directory to operate from.", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/mcp-everything-search/src/mcp_server_everything_search", "default": "/path/to/mcp-everything-search/src/mcp_server_everything_search", "type": "named", "name": "--directory", - "value_hint": "/path/to/mcp-everything-search/src/mcp_server_everything_search" + "valueHint": "/path/to/mcp-everything-search/src/mcp_server_everything_search" }, { "description": "Server name to execute (positional argument)", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp-server-everything-search", "default": "mcp-server-everything-search", "type": "positional", - "value_hint": "mcp-server-everything-search" + "valueHint": "mcp-server-everything-search" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "path/to/Everything-SDK/dll/Everything64.dll", "name": "EVERYTHING_SDK_PATH" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-everything-search", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -7394,10 +7553,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c6f8403f-30d0-45d2-b7c3-95a6cb61c4b4", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c6f8403f-30d0-45d2-b7c3-95a6cb61c4b4", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c6f8403f-30d0-45d2-b7c3-95a6cb61c4b4" } } }, @@ -7414,15 +7574,15 @@ "packages": [ { "version": "0.1.1", - "environment_variables": [ + "environmentVariables": [ { "description": "/path/to/excel/files", "name": "EXCEL_FILES_PATH" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "excel-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -7430,10 +7590,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "2a5c04e4-0526-492b-aa98-49896e033b74", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "2a5c04e4-0526-492b-aa98-49896e033b74", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "2a5c04e4-0526-492b-aa98-49896e033b74" } } }, @@ -7450,9 +7611,9 @@ "packages": [ { "version": "0.1.4", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "fpl-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -7460,10 +7621,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "f1da402e-a006-4364-a100-5131eb05b579", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "f1da402e-a006-4364-a100-5131eb05b579", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "f1da402e-a006-4364-a100-5131eb05b579" } } }, @@ -7480,19 +7642,19 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { - "is_required": true, + "isRequired": true, "format": "string", "value": "fastn-server.py", "default": "fastn-server.py", "type": "positional", - "value_hint": "fastn-server.py" + "valueHint": "fastn-server.py" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "fastn", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7500,10 +7662,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "3d7c6822-88bd-4569-a099-1e58b9b365b0", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "3d7c6822-88bd-4569-a099-1e58b9b365b0", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "3d7c6822-88bd-4569-a099-1e58b9b365b0" } } }, @@ -7520,15 +7683,15 @@ "packages": [ { "version": "0.2.3", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "FRED_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "fred-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7536,10 +7699,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "2382172a-b26a-40fc-adee-f82132b56edc", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "2382172a-b26a-40fc-adee-f82132b56edc", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "2382172a-b26a-40fc-adee-f82132b56edc" } } }, @@ -7556,9 +7720,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "fetch", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -7566,10 +7730,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c2f4ab61-b279-4cb9-932d-5f60bcd1534a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c2f4ab61-b279-4cb9-932d-5f60bcd1534a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c2f4ab61-b279-4cb9-932d-5f60bcd1534a" } } }, @@ -7586,20 +7751,20 @@ "packages": [ { "version": "0.2.2", - "package_arguments": [ + "packageArguments": [ { "description": "Figma API Key flag", - "is_required": true, + "isRequired": true, "format": "string", "value": "YOUR-KEY", "default": "YOUR-KEY", "type": "named", "name": "--figma-api-key", - "value_hint": "YOUR-KEY" + "valueHint": "YOUR-KEY" }, { "description": "stdio mode", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -7607,9 +7772,9 @@ "name": "--stdio" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "figma-developer-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7617,10 +7782,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "e61c643c-ec01-483c-a586-20f87ab6280e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "e61c643c-ec01-483c-a586-20f87ab6280e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "e61c643c-ec01-483c-a586-20f87ab6280e" } } }, @@ -7637,9 +7803,9 @@ "packages": [ { "version": "1.4.9", - "registry_type": "npm", + "registryType": "npm", "identifier": "@gannonh/firebase-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7647,10 +7813,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d7a1d303-082e-477d-8ab5-9d65dc0117d9", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d7a1d303-082e-477d-8ab5-9d65dc0117d9", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d7a1d303-082e-477d-8ab5-9d65dc0117d9" } } }, @@ -7667,9 +7834,9 @@ "packages": [ { "version": "1.9.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "firecrawl-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7677,10 +7844,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "3947e186-beb0-4372-8f74-045047dacebd", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "3947e186-beb0-4372-8f74-045047dacebd", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "3947e186-beb0-4372-8f74-045047dacebd" } } }, @@ -7697,7 +7865,7 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_key_here", "name": "FR24_API_KEY" @@ -7707,9 +7875,9 @@ "name": "FR24_API_URL" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "flightradar24-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7717,10 +7885,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "50b7ab52-c3d0-40bc-b342-38fa93da54ff", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "50b7ab52-c3d0-40bc-b342-38fa93da54ff", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "50b7ab52-c3d0-40bc-b342-38fa93da54ff" } } }, @@ -7737,9 +7906,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "freqtrade-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -7747,10 +7916,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "573c235f-93d7-45a3-9f23-b1166a660c97", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "573c235f-93d7-45a3-9f23-b1166a660c97", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "573c235f-93d7-45a3-9f23-b1166a660c97" } } }, @@ -7767,7 +7937,7 @@ "packages": [ { "version": "0.1.0", - "environment_variables": [ + "environmentVariables": [ { "description": "https://yourblog.com", "name": "GHOST_API_URL" @@ -7781,9 +7951,9 @@ "name": "GHOST_API_VERSION" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@fanyangmeng/ghost-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7791,10 +7961,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "e4927319-b643-498e-935f-51bad4e30381", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "e4927319-b643-498e-935f-51bad4e30381", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "e4927319-b643-498e-935f-51bad4e30381" } } }, @@ -7811,26 +7982,26 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "/dist/index.js", - "is_required": true, + "isRequired": true, "format": "string", "value": "/dist/index.js", "default": "/dist/index.js", "type": "positional", - "value_hint": "/dist/index.js" + "valueHint": "/dist/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "GITHUB_PERSONAL_ACCESS_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "github-actions-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7838,10 +8009,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "fa6d267b-a797-42b7-9510-5abc3c518f3e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "fa6d267b-a797-42b7-9510-5abc3c518f3e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "fa6d267b-a797-42b7-9510-5abc3c518f3e" } } }, @@ -7858,7 +8030,7 @@ "packages": [ { "version": "1.3.0", - "environment_variables": [ + "environmentVariables": [ { "description": "https://github.your-company.com/api/v3", "name": "GITHUB_ENTERPRISE_URL" @@ -7868,9 +8040,9 @@ "name": "GITHUB_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@ddukbg/github-enterprise-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7878,10 +8050,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "cc190d52-686a-4286-812d-c4542161203d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "cc190d52-686a-4286-812d-c4542161203d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "cc190d52-686a-4286-812d-c4542161203d" } } }, @@ -7898,9 +8071,9 @@ "packages": [ { "version": "1.1.9", - "registry_type": "npm", + "registryType": "npm", "identifier": "@gongrzhe/server-gmail-autoauth-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -7908,10 +8081,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "36ad8cdb-408e-4110-827b-8d6a0a0f94bb", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "36ad8cdb-408e-4110-827b-8d6a0a0f94bb", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "36ad8cdb-408e-4110-827b-8d6a0a0f94bb" } } }, @@ -7928,36 +8102,36 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Recipient email address", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--recipient", - "value_hint": "recipient@example.com" + "valueHint": "recipient@example.com" }, { "description": "Email subject", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--subject", - "value_hint": "Hello from MCP Gmail" + "valueHint": "Hello from MCP Gmail" }, { "description": "Plain text email body", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--text-body", - "value_hint": "This is a test email sent via MCP Gmail server" + "valueHint": "This is a test email sent via MCP Gmail server" }, { "description": "HTML email body", @@ -7966,18 +8140,18 @@ "default": "", "type": "named", "name": "--html-body", - "value_hint": "

This is a test email sent via MCP Gmail server

" + "valueHint": "

This is a test email sent via MCP Gmail server

" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_access_token", "name": "google_access_token" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-headless-gmail", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -7985,10 +8159,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "83932f7e-8c4d-475b-b03b-f30bc31793d3", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "83932f7e-8c4d-475b-b03b-f30bc31793d3", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "83932f7e-8c4d-475b-b03b-f30bc31793d3" } } }, @@ -8005,9 +8180,9 @@ "packages": [ { "version": "0.4.3", - "registry_type": "npm", + "registryType": "npm", "identifier": "goalstory-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -8015,10 +8190,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "21242e10-3373-40a3-9119-e4d075b7c27e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "21242e10-3373-40a3-9119-e4d075b7c27e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "21242e10-3373-40a3-9119-e4d075b7c27e" } } }, @@ -8035,9 +8211,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "goat-repo", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -8045,10 +8221,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6e61849a-2312-4c76-a9d0-0a4b84a7795e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6e61849a-2312-4c76-a9d0-0a4b84a7795e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6e61849a-2312-4c76-a9d0-0a4b84a7795e" } } }, @@ -8065,15 +8242,15 @@ "packages": [ { "version": "0.1.0", - "environment_variables": [ + "environmentVariables": [ { "description": "true", "name": "DEBUG" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "godot-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -8081,10 +8258,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "8663db3e-ad80-4805-8032-11a3f303b5fc", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "8663db3e-ad80-4805-8032-11a3f303b5fc", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "8663db3e-ad80-4805-8032-11a3f303b5fc" } } }, @@ -8101,29 +8279,29 @@ "packages": [ { "version": "0.11.1", - "package_arguments": [ + "packageArguments": [ { "description": "Run container image", - "is_required": true, + "isRequired": true, "format": "string", "value": "ghcr.io/mark3labs/mcp-filesystem-server:latest", "default": "ghcr.io/mark3labs/mcp-filesystem-server:latest", "type": "positional", - "value_hint": "ghcr.io/mark3labs/mcp-filesystem-server:latest" + "valueHint": "ghcr.io/mark3labs/mcp-filesystem-server:latest" }, { "description": "Allowed directory path", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/allowed/directory", "default": "/path/to/allowed/directory", "type": "positional", - "value_hint": "/path/to/allowed/directory" + "valueHint": "/path/to/allowed/directory" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mark3labs/mcp-filesystem-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -8131,10 +8309,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "93c84b33-4392-41b2-85be-764e5f39da74", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "93c84b33-4392-41b2-85be-764e5f39da74", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "93c84b33-4392-41b2-85be-764e5f39da74" } } }, @@ -8151,28 +8330,28 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Path to the source directory", - "is_required": true, + "isRequired": true, "format": "string", "value": "/mcp-goodnews/src/mcp_goodnews", "default": "/mcp-goodnews/src/mcp_goodnews", "type": "named", "name": "--directory", - "value_hint": "/mcp-goodnews/src/mcp_goodnews" + "valueHint": "/mcp-goodnews/src/mcp_goodnews" }, { "description": "Python script to start the server", - "is_required": true, + "isRequired": true, "format": "string", "value": "server.py", "default": "server.py", "type": "positional", - "value_hint": "server.py" + "valueHint": "server.py" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "NEWS_API_KEY" @@ -8182,9 +8361,9 @@ "name": "COHERE_API_KEY" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-goodnews", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -8192,10 +8371,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "91c0fc60-7dc9-4095-a05a-9f816738df67", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "91c0fc60-7dc9-4095-a05a-9f816738df67", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "91c0fc60-7dc9-4095-a05a-9f816738df67" } } }, @@ -8212,9 +8392,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "googlecalendar", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -8222,10 +8402,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "165ef95f-bfb3-4b08-b523-d17748fdfe31", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "165ef95f-bfb3-4b08-b523-d17748fdfe31", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "165ef95f-bfb3-4b08-b523-d17748fdfe31" } } }, @@ -8242,9 +8423,9 @@ "packages": [ { "version": "1.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "google-calendar-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -8252,10 +8433,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6543c44a-7ad6-4f9e-bf7e-9f8f969934bf", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6543c44a-7ad6-4f9e-bf7e-9f8f969934bf", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6543c44a-7ad6-4f9e-bf7e-9f8f969934bf" } } }, @@ -8272,9 +8454,9 @@ "packages": [ { "version": "0.2.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "@adenot/mcp-google-search", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -8282,10 +8464,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d5076249-cb9d-4c5e-ae2e-544779ec1a04", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d5076249-cb9d-4c5e-ae2e-544779ec1a04", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d5076249-cb9d-4c5e-ae2e-544779ec1a04" } } }, @@ -8302,18 +8485,18 @@ "packages": [ { "version": "0.5.1", - "package_arguments": [ + "packageArguments": [ { "description": "Positional argument for script to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp-google-sheets", "default": "mcp-google-sheets", "type": "positional", - "value_hint": "mcp-google-sheets" + "valueHint": "mcp-google-sheets" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "/full/path/to/cloned/mcp-google-sheets/service-account-key.json", "name": "SERVICE_ACCOUNT_PATH" @@ -8323,9 +8506,9 @@ "name": "DRIVE_FOLDER_ID" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-google-sheets", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -8333,10 +8516,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "69ae0fdb-713d-4f8e-bf8e-d214e79fa295", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "69ae0fdb-713d-4f8e-bf8e-d214e79fa295", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "69ae0fdb-713d-4f8e-bf8e-d214e79fa295" } } }, @@ -8353,20 +8537,20 @@ "packages": [ { "version": "0.2.4.1", - "package_arguments": [ + "packageArguments": [ { "description": "Budget Q2", - "is_required": true, + "isRequired": true, "format": "string", "value": "Budget Q2", "default": "Budget Q2", "type": "positional", - "value_hint": "Budget Q2" + "valueHint": "Budget Q2" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "backend", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -8374,10 +8558,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b1051584-3b09-49af-a97f-a92b47861ed1", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b1051584-3b09-49af-a97f-a92b47861ed1", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b1051584-3b09-49af-a97f-a92b47861ed1" } } }, @@ -8394,9 +8579,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-vertexai-search", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -8404,10 +8589,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "07ccf835-680a-42b4-bf0b-db28367519ee", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "07ccf835-680a-42b4-bf0b-db28367519ee", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "07ccf835-680a-42b4-bf0b-db28367519ee" } } }, @@ -8424,20 +8610,20 @@ "packages": [ { "version": "0.0.1", - "package_arguments": [ + "packageArguments": [ { "description": "/ABSOLUTE/PATH/TO/schema.graphqls", - "is_required": true, + "isRequired": true, "format": "string", "value": "/ABSOLUTE/PATH/TO/schema.graphqls", "default": "/ABSOLUTE/PATH/TO/schema.graphqls", "type": "positional", - "value_hint": "/ABSOLUTE/PATH/TO/schema.graphqls" + "valueHint": "/ABSOLUTE/PATH/TO/schema.graphqls" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-graphql-schema", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -8445,10 +8631,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7461c9c2-108f-46c1-8f35-6206ec509267", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7461c9c2-108f-46c1-8f35-6206ec509267", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7461c9c2-108f-46c1-8f35-6206ec509267" } } }, @@ -8465,7 +8652,7 @@ "packages": [ { "version": "0.1.3", - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_HD_W_ACCESS_TOKEN", "name": "HDW_ACCESS_TOKEN" @@ -8475,9 +8662,9 @@ "name": "HDW_ACCOUNT_ID" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@horizondatawave/mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -8485,10 +8672,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "0f4331b9-9229-49c4-b41c-5c254b610daa", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "0f4331b9-9229-49c4-b41c-5c254b610daa", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "0f4331b9-9229-49c4-b41c-5c254b610daa" } } }, @@ -8505,9 +8693,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "mesh-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -8515,10 +8703,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "97174daf-db12-40ac-bab2-1c4255ce1741", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "97174daf-db12-40ac-bab2-1c4255ce1741", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "97174daf-db12-40ac-bab2-1c4255ce1741" } } }, @@ -8535,7 +8724,7 @@ "packages": [ { "version": "0.2.0", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "HOLASPIRIT_API_TOKEN" @@ -8545,9 +8734,9 @@ "name": "HOLASPIRIT_ORGANIZATION_ID" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "holaspirit-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -8555,10 +8744,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "fffcda50-ddc1-4357-a9bf-b7022f86c582", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "fffcda50-ddc1-4357-a9bf-b7022f86c582", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "fffcda50-ddc1-4357-a9bf-b7022f86c582" } } }, @@ -8575,9 +8765,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "homeassistant-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -8585,10 +8775,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b87405fe-1aae-4a7a-a4d7-cd0b5f267ad8", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b87405fe-1aae-4a7a-a4d7-cd0b5f267ad8", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b87405fe-1aae-4a7a-a4d7-cd0b5f267ad8" } } }, @@ -8605,10 +8796,10 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "-i", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -8617,7 +8808,7 @@ }, { "description": "--rm", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -8626,35 +8817,35 @@ }, { "description": "-e HA_URL", - "is_required": true, + "isRequired": true, "format": "string", "value": "HA_URL", "default": "HA_URL", "type": "named", "name": "-e", - "value_hint": "HA_URL" + "valueHint": "HA_URL" }, { "description": "-e HA_TOKEN", - "is_required": true, + "isRequired": true, "format": "string", "value": "HA_TOKEN", "default": "HA_TOKEN", "type": "named", "name": "-e", - "value_hint": "HA_TOKEN" + "valueHint": "HA_TOKEN" }, { "description": "voska/hass-mcp", - "is_required": true, + "isRequired": true, "format": "string", "value": "voska/hass-mcp", "default": "voska/hass-mcp", "type": "positional", - "value_hint": "voska/hass-mcp" + "valueHint": "voska/hass-mcp" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "http://homeassistant.local:8123", "name": "HA_URL" @@ -8664,9 +8855,9 @@ "name": "HA_TOKEN" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "hass-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -8674,10 +8865,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "67c71178-8632-4d67-abad-c28f6e58c87f", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "67c71178-8632-4d67-abad-c28f6e58c87f", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "67c71178-8632-4d67-abad-c28f6e58c87f" } } }, @@ -8694,36 +8886,36 @@ "packages": [ { "version": "0.2.0", - "package_arguments": [ + "packageArguments": [ { "description": "Attach stdin even if not attached", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "-i", - "value_hint": "-i" + "valueHint": "-i" }, { "description": "Remove container after exit", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--rm", - "value_hint": "--rm" + "valueHint": "--rm" }, { "description": "Set HUBSPOT_ACCESS_TOKEN environment variable in the container", - "is_required": true, + "isRequired": true, "format": "string", "value": "HUBSPOT_ACCESS_TOKEN=your_token", "default": "HUBSPOT_ACCESS_TOKEN=your_token", "type": "named", "name": "-e", - "value_hint": "HUBSPOT_ACCESS_TOKEN=your_token" + "valueHint": "HUBSPOT_ACCESS_TOKEN=your_token" }, { "description": "Optional persistent storage for state files", @@ -8732,21 +8924,21 @@ "default": "/path/to/storage:/storage", "type": "named", "name": "-v", - "value_hint": "/path/to/storage:/storage" + "valueHint": "/path/to/storage:/storage" }, { "description": "Docker image to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "buryhuang/mcp-hubspot:latest", "default": "buryhuang/mcp-hubspot:latest", "type": "positional", - "value_hint": "buryhuang/mcp-hubspot:latest" + "valueHint": "buryhuang/mcp-hubspot:latest" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-hubspot", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -8754,10 +8946,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "aef75131-e237-4b91-a2b8-c0f416d3618f", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "aef75131-e237-4b91-a2b8-c0f416d3618f", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "aef75131-e237-4b91-a2b8-c0f416d3618f" } } }, @@ -8774,58 +8967,58 @@ "packages": [ { "version": "0.5.4", - "package_arguments": [ + "packageArguments": [ { "description": "--work-dir=~/mcp-files/ or x:/temp/mcp-files/", - "is_required": true, + "isRequired": true, "format": "string", "value": "~/mcp-files/ or x:/temp/mcp-files/", "default": "~/mcp-files/ or x:/temp/mcp-files/", "type": "named", "name": "--work-dir", - "value_hint": "~/mcp-files/ or x:/temp/mcp-files/" + "valueHint": "~/mcp-files/ or x:/temp/mcp-files/" }, { "description": "--HF_TOKEN=HF_{optional token}", - "is_required": true, + "isRequired": true, "format": "string", "value": "HF_{optional token}", "default": "HF_{optional token}", "type": "named", "name": "--HF_TOKEN", - "value_hint": "HF_{optional token}" + "valueHint": "HF_{optional token}" }, { "description": "Qwen/Qwen2-72B-Instruct", - "is_required": true, + "isRequired": true, "format": "string", "value": "Qwen/Qwen2-72B-Instruct", "default": "Qwen/Qwen2-72B-Instruct", "type": "positional", - "value_hint": "Qwen/Qwen2-72B-Instruct" + "valueHint": "Qwen/Qwen2-72B-Instruct" }, { "description": "black-forest-labs/FLUX.1-schnell", - "is_required": true, + "isRequired": true, "format": "string", "value": "black-forest-labs/FLUX.1-schnell", "default": "black-forest-labs/FLUX.1-schnell", "type": "positional", - "value_hint": "black-forest-labs/FLUX.1-schnell" + "valueHint": "black-forest-labs/FLUX.1-schnell" }, { "description": "space/example/specific-endpint", - "is_required": true, + "isRequired": true, "format": "string", "value": "space/example/specific-endpint", "default": "space/example/specific-endpint", "type": "positional", - "value_hint": "space/example/specific-endpint" + "valueHint": "space/example/specific-endpint" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@llmindset/mcp-hfspace", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -8833,10 +9026,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "532d7690-7a65-470f-81da-2ba3042bee05", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "532d7690-7a65-470f-81da-2ba3042bee05", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "532d7690-7a65-470f-81da-2ba3042bee05" } } }, @@ -8853,9 +9047,9 @@ "packages": [ { "version": "0.0.1", - "registry_type": "npm", + "registryType": "npm", "identifier": "@mektigboy/server-hyperliquid", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -8863,10 +9057,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "0d57edf7-3fbb-42b4-aa9e-b255e7d6f8fa", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "0d57edf7-3fbb-42b4-aa9e-b255e7d6f8fa", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "0d57edf7-3fbb-42b4-aa9e-b255e7d6f8fa" } } }, @@ -8883,36 +9078,36 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "--from git+https://github.com/iflytek/ifly-workflow-mcp-server", - "is_required": true, + "isRequired": true, "format": "string", "value": "git+https://github.com/iflytek/ifly-workflow-mcp-server", "default": "git+https://github.com/iflytek/ifly-workflow-mcp-server", "type": "named", "name": "--from", - "value_hint": "git+https://github.com/iflytek/ifly-workflow-mcp-server" + "valueHint": "git+https://github.com/iflytek/ifly-workflow-mcp-server" }, { "description": "ifly_workflow_mcp_server", - "is_required": true, + "isRequired": true, "format": "string", "value": "ifly_workflow_mcp_server", "default": "ifly_workflow_mcp_server", "type": "positional", - "value_hint": "ifly_workflow_mcp_server" + "valueHint": "ifly_workflow_mcp_server" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "/Users/hygao1024/Projects/config.yaml", "name": "CONFIG_PATH" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "ifly-workflow-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -8920,10 +9115,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6a9b532e-61df-4d4d-a898-25d66aa60315", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6a9b532e-61df-4d4d-a898-25d66aa60315", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6a9b532e-61df-4d4d-a898-25d66aa60315" } } }, @@ -8940,7 +9136,7 @@ "packages": [ { "version": "1.0.1", - "environment_variables": [ + "environmentVariables": [ { "description": "your-replicate-api-token", "name": "REPLICATE_API_TOKEN" @@ -8950,9 +9146,9 @@ "name": "MODEL" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@gongrzhe/image-gen-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -8960,10 +9156,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "5bf6d045-dc83-4b51-858f-eb9c3403087f", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "5bf6d045-dc83-4b51-858f-eb9c3403087f", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "5bf6d045-dc83-4b51-858f-eb9c3403087f" } } }, @@ -8980,7 +9177,7 @@ "packages": [ { "version": "0.1.1", - "environment_variables": [ + "environmentVariables": [ { "description": "your_token", "name": "INFLUXDB_TOKEN" @@ -8994,9 +9191,9 @@ "name": "INFLUXDB_ORG" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "influxdb-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9004,10 +9201,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d78df157-559d-4e87-af1f-0dcbfe703a23", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d78df157-559d-4e87-af1f-0dcbfe703a23", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d78df157-559d-4e87-af1f-0dcbfe703a23" } } }, @@ -9024,9 +9222,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "@inoyu/mcp-unomi-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9034,10 +9232,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "601ee7e9-e0db-470e-80e5-f1509cddf6d7", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "601ee7e9-e0db-470e-80e5-f1509cddf6d7", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "601ee7e9-e0db-470e-80e5-f1509cddf6d7" } } }, @@ -9054,15 +9253,15 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your_intercom_api_token", "name": "INTERCOM_ACCESS_TOKEN" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-for-intercom", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -9070,10 +9269,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "1967f4e6-f229-4d5f-a648-9bdc67d39da8", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "1967f4e6-f229-4d5f-a648-9bdc67d39da8", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "1967f4e6-f229-4d5f-a648-9bdc67d39da8" } } }, @@ -9090,9 +9290,9 @@ "packages": [ { "version": "1.0.1", - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-simulator-ios-idb", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -9100,10 +9300,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b9fa6e10-c6f4-424d-b289-469d49decaaf", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b9fa6e10-c6f4-424d-b289-469d49decaaf", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b9fa6e10-c6f4-424d-b289-469d49decaaf" } } }, @@ -9120,9 +9321,9 @@ "packages": [ { "version": "1.2.5", - "registry_type": "npm", + "registryType": "npm", "identifier": "iterm-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9130,10 +9331,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "dcac9b0e-b18c-4570-947c-7a6d351b02df", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "dcac9b0e-b18c-4570-947c-7a6d351b02df", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "dcac9b0e-b18c-4570-947c-7a6d351b02df" } } }, @@ -9150,9 +9352,9 @@ "packages": [ { "version": "1.0.4", - "registry_type": "npm", + "registryType": "npm", "identifier": "iterm_mcp_server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9160,10 +9362,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "add3f73d-394b-4b99-b255-8d9d89db84c2", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "add3f73d-394b-4b99-b255-8d9d89db84c2", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "add3f73d-394b-4b99-b255-8d9d89db84c2" } } }, @@ -9180,19 +9383,19 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { - "is_required": true, + "isRequired": true, "format": "string", "value": "jmeter_server.py", "default": "jmeter_server.py", "type": "positional", - "value_hint": "jmeter_server.py" + "valueHint": "jmeter_server.py" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "jmeter-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -9200,10 +9403,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d0f30dc9-bc11-43f8-9b61-034e2bec78d5", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d0f30dc9-bc11-43f8-9b61-034e2bec78d5", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d0f30dc9-bc11-43f8-9b61-034e2bec78d5" } } }, @@ -9220,9 +9424,9 @@ "packages": [ { "version": "1.0.3", - "registry_type": "npm", + "registryType": "npm", "identifier": "@gongrzhe/server-json-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9230,10 +9434,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7e73a81a-e914-4cf7-aff2-482d0047e8dd", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7e73a81a-e914-4cf7-aff2-482d0047e8dd", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7e73a81a-e914-4cf7-aff2-482d0047e8dd" } } }, @@ -9250,18 +9455,18 @@ "packages": [ { "version": "1.0.1", - "package_arguments": [ + "packageArguments": [ { "description": "Jupiter MCP server entry file", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/jupiter-mcp/server/index.js", "default": "path/to/jupiter-mcp/server/index.js", "type": "positional", - "value_hint": "path/to/jupiter-mcp/server/index.js" + "valueHint": "path/to/jupiter-mcp/server/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "solana rpc url you can access", "name": "SOLANA_RPC_URL" @@ -9271,9 +9476,9 @@ "name": "PRIVATE_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "jupiter-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9281,10 +9486,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "243a8c0e-4bb7-4932-9d7c-8e8229306295", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "243a8c0e-4bb7-4932-9d7c-8e8229306295", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "243a8c0e-4bb7-4932-9d7c-8e8229306295" } } }, @@ -9301,18 +9507,18 @@ "packages": [ { "version": "0.0.2", - "package_arguments": [ + "packageArguments": [ { "description": "Second positional argument to the command", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/dist/index.js", "default": "path/to/dist/index.js", "type": "positional", - "value_hint": "path/to/dist/index.js" + "valueHint": "path/to/dist/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "http://localhost:8080", "name": "KEYCLOAK_URL" @@ -9326,9 +9532,9 @@ "name": "KEYCLOAK_ADMIN_PASSWORD" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "keycloak-model-context-protocol", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9336,10 +9542,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ac8e4d2b-da97-4a40-934b-1c516b4250fe", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ac8e4d2b-da97-4a40-934b-1c516b4250fe", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ac8e4d2b-da97-4a40-934b-1c516b4250fe" } } }, @@ -9356,10 +9563,10 @@ "packages": [ { "version": "1.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "-i", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -9368,7 +9575,7 @@ }, { "description": "--rm", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -9377,34 +9584,34 @@ }, { "description": "-e KIBELA_TEAM", - "is_required": true, + "isRequired": true, "format": "string", "value": "KIBELA_TEAM", "default": "KIBELA_TEAM", "type": "named", "name": "-e", - "value_hint": "KIBELA_TEAM" + "valueHint": "KIBELA_TEAM" }, { "description": "-e KIBELA_TOKEN", - "is_required": true, + "isRequired": true, "format": "string", "value": "KIBELA_TOKEN", "default": "KIBELA_TOKEN", "type": "named", "name": "-e", - "value_hint": "KIBELA_TOKEN" + "valueHint": "KIBELA_TOKEN" }, { "description": "mcp-kibela-server", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp-kibela-server", "default": "mcp-kibela-server", "type": "positional" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_TEAM_NAME", "name": "KIBELA_TEAM" @@ -9414,9 +9621,9 @@ "name": "KIBELA_TOKEN" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "@kiwamizamurai/mcp-kibela-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -9424,10 +9631,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "984ee65a-dec0-4a75-b21b-2efbcd9600bd", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "984ee65a-dec0-4a75-b21b-2efbcd9600bd", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "984ee65a-dec0-4a75-b21b-2efbcd9600bd" } } }, @@ -9444,7 +9652,7 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "kpat_api_key_here", "name": "KONNECT_ACCESS_TOKEN" @@ -9454,9 +9662,9 @@ "name": "KONNECT_REGION" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "kong-konnect-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -9464,10 +9672,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "86a12728-3ab9-4a69-a447-bcb67957a5f7", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "86a12728-3ab9-4a69-a447-bcb67957a5f7", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "86a12728-3ab9-4a69-a447-bcb67957a5f7" } } }, @@ -9484,9 +9693,9 @@ "packages": [ { "version": "1.6.2", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-kubernetes", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -9494,10 +9703,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6a4d324e-7d12-495c-b72c-fe5803363af1", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6a4d324e-7d12-495c-b72c-fe5803363af1", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6a4d324e-7d12-495c-b72c-fe5803363af1" } } }, @@ -9514,15 +9724,15 @@ "packages": [ { "version": "0.1.0", - "environment_variables": [ + "environmentVariables": [ { "description": "http://127.0.0.1:7860/api/v1/run/480ec7b3-29d2-4caa-b03b-e74118f35fac", "name": "API_ENDPOINT" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "doc-qa-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -9530,10 +9740,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "3c265bda-03e4-4e46-bceb-437a1b02f431", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "3c265bda-03e4-4e46-bceb-437a1b02f431", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "3c265bda-03e4-4e46-bceb-437a1b02f431" } } }, @@ -9550,7 +9761,7 @@ "packages": [ { "version": "0.0.11", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "LIGHTDASH_API_KEY" @@ -9560,9 +9771,9 @@ "name": "LIGHTDASH_API_URL" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "lightdash-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9570,10 +9781,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "17c2c7f2-20f2-424f-8466-b164ed19ddef", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "17c2c7f2-20f2-424f-8466-b164ed19ddef", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "17c2c7f2-20f2-424f-8466-b164ed19ddef" } } }, @@ -9590,21 +9802,21 @@ "packages": [ { "version": "0.2.0", - "package_arguments": [ + "packageArguments": [ { "description": "debug", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "debug", - "value_hint": "debug" + "valueHint": "debug" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "lsp-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -9612,10 +9824,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "32f876df-1f34-40d7-aed8-0431b32d5091", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "32f876df-1f34-40d7-aed8-0431b32d5091", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "32f876df-1f34-40d7-aed8-0431b32d5091" } } }, @@ -9632,15 +9845,15 @@ "packages": [ { "version": "1.0.9", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "LINEAR_API_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@tacticlaunch/mcp-linear", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9648,10 +9861,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a4a1013a-5789-4020-9a16-eda6c453aba7", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a4a1013a-5789-4020-9a16-eda6c453aba7", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a4a1013a-5789-4020-9a16-eda6c453aba7" } } }, @@ -9668,15 +9882,15 @@ "packages": [ { "version": "0.1.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your_linear_api_key_here", "name": "LINEAR_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "linear-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9684,10 +9898,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a0e6ce8a-15eb-4776-b9de-a4bb3c7e4730", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a0e6ce8a-15eb-4776-b9de-a4bb3c7e4730", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a0e6ce8a-15eb-4776-b9de-a4bb3c7e4730" } } }, @@ -9704,49 +9919,49 @@ "packages": [ { "version": "0.1.2", - "package_arguments": [ + "packageArguments": [ { "description": "Index to be used (first occurrence)", - "is_required": true, + "isRequired": true, "format": "string", "value": "10k-SEC-Tesla", "default": "10k-SEC-Tesla", "type": "named", "name": "--index", - "value_hint": "10k-SEC-Tesla" + "valueHint": "10k-SEC-Tesla" }, { "description": "Description for index (first occurrence)", - "is_required": true, + "isRequired": true, "format": "string", "value": "10k SEC documents from 2023 for Tesla", "default": "10k SEC documents from 2023 for Tesla", "type": "named", "name": "--description", - "value_hint": "10k SEC documents from 2023 for Tesla" + "valueHint": "10k SEC documents from 2023 for Tesla" }, { "description": "Index to be used (second occurrence)", - "is_required": true, + "isRequired": true, "format": "string", "value": "10k-SEC-Apple", "default": "10k-SEC-Apple", "type": "named", "name": "--index", - "value_hint": "10k-SEC-Apple" + "valueHint": "10k-SEC-Apple" }, { "description": "Description for index (second occurrence)", - "is_required": true, + "isRequired": true, "format": "string", "value": "10k SEC documents from 2023 for Apple", "default": "10k SEC documents from 2023 for Apple", "type": "named", "name": "--description", - "value_hint": "10k SEC documents from 2023 for Apple" + "valueHint": "10k SEC documents from 2023 for Apple" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "LLAMA_CLOUD_PROJECT_NAME" @@ -9756,9 +9971,9 @@ "name": "LLAMA_CLOUD_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@llamaindex/mcp-server-llamacloud", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9766,10 +9981,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6cfb4c39-82bb-4b43-94a5-1f50ebd10c71", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6cfb4c39-82bb-4b43-94a5-1f50ebd10c71", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6cfb4c39-82bb-4b43-94a5-1f50ebd10c71" } } }, @@ -9786,21 +10002,21 @@ "packages": [ { "version": "0.3.2", - "package_arguments": [ + "packageArguments": [ { "description": "Named argument --from with value llm-context", - "is_required": true, + "isRequired": true, "format": "string", "value": "llm-context", "default": "llm-context", "type": "named", "name": "--from", - "value_hint": "llm-context" + "valueHint": "llm-context" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "llm-context", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -9808,10 +10024,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b9f04c6e-0d22-4f17-af83-ccde8b03e4e8", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b9f04c6e-0d22-4f17-af83-ccde8b03e4e8", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b9f04c6e-0d22-4f17-af83-ccde8b03e4e8" } } }, @@ -9828,9 +10045,9 @@ "packages": [ { "version": "0.6.6", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mac-messages-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -9838,10 +10055,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "e7e51609-0d23-4d96-8063-d136bd993c93", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "e7e51609-0d23-4d96-8063-d136bd993c93", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "e7e51609-0d23-4d96-8063-d136bd993c93" } } }, @@ -9858,28 +10076,28 @@ "packages": [ { "version": "0.1.2", - "package_arguments": [ + "packageArguments": [ { "description": "--directory /YOUR/SOURCE/PATH/mcp-server-mariadb/src/mcp_server_mariadb", - "is_required": true, + "isRequired": true, "format": "string", "value": "/YOUR/SOURCE/PATH/mcp-server-mariadb/src/mcp_server_mariadb", "default": "/YOUR/SOURCE/PATH/mcp-server-mariadb/src/mcp_server_mariadb", "type": "named", "name": "--directory", - "value_hint": "/YOUR/SOURCE/PATH/mcp-server-mariadb/src/mcp_server_mariadb" + "valueHint": "/YOUR/SOURCE/PATH/mcp-server-mariadb/src/mcp_server_mariadb" }, { "description": "server.py", - "is_required": true, + "isRequired": true, "format": "string", "value": "server.py", "default": "server.py", "type": "positional", - "value_hint": "server.py" + "valueHint": "server.py" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "127.0.0.1", "name": "MARIADB_HOST" @@ -9901,9 +10119,9 @@ "name": "MARIADB_PORT" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-mariadb", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -9911,10 +10129,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "8197c60c-08c6-4d90-9d63-e64bf48ab6e4", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "8197c60c-08c6-4d90-9d63-e64bf48ab6e4", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "8197c60c-08c6-4d90-9d63-e64bf48ab6e4" } } }, @@ -9931,9 +10150,9 @@ "packages": [ { "version": "1.0.7", - "registry_type": "npm", + "registryType": "npm", "identifier": "@liuyoshio/mcp-compass", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9941,10 +10160,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "e4578522-e426-44f4-818c-68784f2a3038", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "e4578522-e426-44f4-818c-68784f2a3038", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "e4578522-e426-44f4-818c-68784f2a3038" } } }, @@ -9961,9 +10181,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-create", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -9971,10 +10191,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "84bda3c9-65ce-45f2-898f-6e370718b43d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "84bda3c9-65ce-45f2-898f-6e370718b43d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "84bda3c9-65ce-45f2-898f-6e370718b43d" } } }, @@ -9991,9 +10212,9 @@ "packages": [ { "version": "0.5.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "@anaisbetts/mcp-installer", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -10001,10 +10222,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "9f5885d3-fe18-483d-b7b2-f507b2f37ccb", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "9f5885d3-fe18-483d-b7b2-f507b2f37ccb", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "9f5885d3-fe18-483d-b7b2-f507b2f37ccb" } } }, @@ -10021,20 +10243,20 @@ "packages": [ { "version": "0.5.0", - "package_arguments": [ + "packageArguments": [ { "description": "Mounts ~/.kube/config into container", - "is_required": true, + "isRequired": true, "format": "string", "value": "~/.kube/config:/home/nonroot/.kube/config", "default": "~/.kube/config:/home/nonroot/.kube/config", "type": "named", "name": "-v", - "value_hint": "~/.kube/config:/home/nonroot/.kube/config" + "valueHint": "~/.kube/config:/home/nonroot/.kube/config" }, { "description": "Removes container after exit", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -10043,17 +10265,17 @@ }, { "description": "Docker image to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcpk8s/server:latest", "default": "mcpk8s/server:latest", "type": "positional", - "value_hint": "mcpk8s/server:latest" + "valueHint": "mcpk8s/server:latest" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "strowk/mcp-k8s-go", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -10061,10 +10283,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a59a162f-d811-4344-bf53-606a74bb50c6", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a59a162f-d811-4344-bf53-606a74bb50c6", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a59a162f-d811-4344-bf53-606a74bb50c6" } } }, @@ -10081,9 +10304,9 @@ "packages": [ { "version": "0.6.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-proxy", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -10091,10 +10314,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "5b01e888-7245-46a6-8747-d6f9ca374c43", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "5b01e888-7245-46a6-8747-d6f9ca374c43", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "5b01e888-7245-46a6-8747-d6f9ca374c43" } } }, @@ -10111,9 +10335,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-salesforce", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -10121,10 +10345,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "3ec2249d-2ed3-45d2-8b52-185abfa918ac", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "3ec2249d-2ed3-45d2-8b52-185abfa918ac", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "3ec2249d-2ed3-45d2-8b52-185abfa918ac" } } }, @@ -10141,9 +10366,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "mem0-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -10151,10 +10376,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4f189cdd-04a5-47f6-b87b-7d38cc82e625", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4f189cdd-04a5-47f6-b87b-7d38cc82e625", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4f189cdd-04a5-47f6-b87b-7d38cc82e625" } } }, @@ -10171,41 +10397,41 @@ "packages": [ { "version": "0.2.8", - "package_arguments": [ + "packageArguments": [ { "description": "", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--login", - "value_hint": "" + "valueHint": "" }, { "description": "", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--password", - "value_hint": "" + "valueHint": "" }, { "description": "", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--server", - "value_hint": "" + "valueHint": "" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "metatrader-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -10213,10 +10439,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b3dbb84c-3e48-4cbc-a581-bb9ebe133cb4", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b3dbb84c-3e48-4cbc-a581-bb9ebe133cb4", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b3dbb84c-3e48-4cbc-a581-bb9ebe133cb4" } } }, @@ -10233,7 +10460,7 @@ "packages": [ { "version": "1.1.0", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "METRICOOL_USER_TOKEN" @@ -10243,9 +10470,9 @@ "name": "METRICOOL_USER_ID" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-metricool", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -10253,10 +10480,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "091ef217-8e6d-4e06-8cb9-bc5ffe5467b1", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "091ef217-8e6d-4e06-8cb9-bc5ffe5467b1", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "091ef217-8e6d-4e06-8cb9-bc5ffe5467b1" } } }, @@ -10273,28 +10501,28 @@ "packages": [ { "version": "0.1.2", - "package_arguments": [ + "packageArguments": [ { "description": "Directory path for the MCP server", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/mssql_mcp_server", "default": "path/to/mssql_mcp_server", "type": "named", "name": "--directory", - "value_hint": "path/to/mssql_mcp_server" + "valueHint": "path/to/mssql_mcp_server" }, { "description": "MCP server module name to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "mssql_mcp_server", "default": "mssql_mcp_server", "type": "positional", - "value_hint": "mssql_mcp_server" + "valueHint": "mssql_mcp_server" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "mssql_driver", "name": "MSSQL_DRIVER" @@ -10316,9 +10544,9 @@ "name": "MSSQL_DATABASE" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mssql_mcp_server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -10326,10 +10554,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "53290776-f4aa-488d-a10f-135a17645b02", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "53290776-f4aa-488d-a10f-135a17645b02", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "53290776-f4aa-488d-a10f-135a17645b02" } } }, @@ -10346,9 +10575,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "ocr", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -10356,10 +10585,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4365781f-28ff-4865-aa7d-909678f6dbb4", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4365781f-28ff-4865-aa7d-909678f6dbb4", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4365781f-28ff-4865-aa7d-909678f6dbb4" } } }, @@ -10376,51 +10606,51 @@ "packages": [ { "version": "0.1.6", - "package_arguments": [ + "packageArguments": [ { "description": "Host to connect to", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--host", - "value_hint": "" + "valueHint": "" }, { "description": "Username for authentication", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--username", - "value_hint": "" + "valueHint": "" }, { "description": "Password for authentication", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--password", - "value_hint": "" + "valueHint": "" }, { "description": "Port to connect to", - "is_required": true, + "isRequired": true, "format": "string", "value": "22", "default": "22", "type": "named", "name": "--port", - "value_hint": "22" + "valueHint": "22" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-mikrotik", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -10428,10 +10658,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "5ebda83c-f2b3-4b14-ba72-13d940fa940a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "5ebda83c-f2b3-4b14-ba72-13d940fa940a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "5ebda83c-f2b3-4b14-ba72-13d940fa940a" } } }, @@ -10448,10 +10679,10 @@ "packages": [ { "version": "0.1.1", - "package_arguments": [ + "packageArguments": [ { "description": "-i", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -10460,18 +10691,18 @@ }, { "description": "-v /path/to/output/folder:/output", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/output/folder:/output", "default": "/path/to/output/folder:/output", "type": "named", "name": "-v", - "value_hint": "/path/to/output/folder:/output" + "valueHint": "/path/to/output/folder:/output" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mindmap-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -10479,10 +10710,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7f9416dd-34cf-4f0d-bcfb-c87cbee3abf6", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7f9416dd-34cf-4f0d-bcfb-c87cbee3abf6", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7f9416dd-34cf-4f0d-bcfb-c87cbee3abf6" } } }, @@ -10499,9 +10731,9 @@ "packages": [ { "version": "0.0.17", - "registry_type": "npm", + "registryType": "npm", "identifier": "@mobilenext/mobile-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -10509,10 +10741,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6fefc93f-3f03-47b0-9f42-21d5a5841490", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6fefc93f-3f03-47b0-9f42-21d5a5841490", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6fefc93f-3f03-47b0-9f42-21d5a5841490" } } }, @@ -10529,20 +10762,20 @@ "packages": [ { "version": "1.3.0", - "package_arguments": [ + "packageArguments": [ { "description": "MongoDB connection string", - "is_required": true, + "isRequired": true, "format": "string", "value": "mongodb://muhammed:kilic@localhost:27017/database", "default": "mongodb://muhammed:kilic@localhost:27017/database", "type": "positional", - "value_hint": "mongodb://muhammed:kilic@localhost:27017/database" + "valueHint": "mongodb://muhammed:kilic@localhost:27017/database" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-mongo-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -10550,10 +10783,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b61a2d2e-db6c-47b4-9437-7edc8525d063", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b61a2d2e-db6c-47b4-9437-7edc8525d063", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b61a2d2e-db6c-47b4-9437-7edc8525d063" } } }, @@ -10570,9 +10804,9 @@ "packages": [ { "version": "9.1.4", - "registry_type": "npm", + "registryType": "npm", "identifier": "mongodb-lens", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -10580,10 +10814,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b4970e5b-1259-4ff9-a40a-c570f27d0930", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b4970e5b-1259-4ff9-a40a-c570f27d0930", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b4970e5b-1259-4ff9-a40a-c570f27d0930" } } }, @@ -10600,9 +10835,9 @@ "packages": [ { "version": "0.2.9", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-monday", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -10610,10 +10845,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ac665c5c-e1de-4686-9012-5ac101186a31", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ac665c5c-e1de-4686-9012-5ac101186a31", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ac665c5c-e1de-4686-9012-5ac101186a31" } } }, @@ -10630,9 +10866,9 @@ "packages": [ { "version": "0.1.3", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "multicluster-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -10640,10 +10876,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "55ba52cd-8e0a-4bcb-9a96-1658f2d713e0", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "55ba52cd-8e0a-4bcb-9a96-1658f2d713e0", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "55ba52cd-8e0a-4bcb-9a96-1658f2d713e0" } } }, @@ -10660,9 +10897,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "multi-model-advisor", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -10670,10 +10907,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "abcce212-b3e1-4741-a8b3-86c95c276fb1", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "abcce212-b3e1-4741-a8b3-86c95c276fb1", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "abcce212-b3e1-4741-a8b3-86c95c276fb1" } } }, @@ -10690,18 +10928,18 @@ "packages": [ { "version": "2.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "Path to the MCP server MySQL entry point.", - "is_required": true, + "isRequired": true, "format": "string", "value": "/full/path/to/mcp-server-mysql/dist/index.js", "default": "/full/path/to/mcp-server-mysql/dist/index.js", "type": "positional", - "value_hint": "/full/path/to/mcp-server-mysql/dist/index.js" + "valueHint": "/full/path/to/mcp-server-mysql/dist/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "127.0.0.1", "name": "MYSQL_HOST" @@ -10723,9 +10961,9 @@ "name": "MYSQL_DB" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@benborla29/mcp-server-mysql", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -10733,10 +10971,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "22fbb4c3-d5fd-4191-af7a-c78686cc6123", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "22fbb4c3-d5fd-4191-af7a-c78686cc6123", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "22fbb4c3-d5fd-4191-af7a-c78686cc6123" } } }, @@ -10753,28 +10992,28 @@ "packages": [ { "version": "0.2.2", - "package_arguments": [ + "packageArguments": [ { "description": "Specify the origin of the package", - "is_required": true, + "isRequired": true, "format": "string", "value": "mysql-mcp-server", "default": "mysql-mcp-server", "type": "named", "name": "--from", - "value_hint": "mysql-mcp-server" + "valueHint": "mysql-mcp-server" }, { "description": "Name of the MCP server executable", - "is_required": true, + "isRequired": true, "format": "string", "value": "mysql_mcp_server", "default": "mysql_mcp_server", "type": "positional", - "value_hint": "mysql_mcp_server" + "valueHint": "mysql_mcp_server" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "localhost", "name": "MYSQL_HOST" @@ -10796,9 +11035,9 @@ "name": "MYSQL_DATABASE" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mysql_mcp_server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -10806,10 +11045,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "56577627-939e-4f31-8c96-654586538eb5", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "56577627-939e-4f31-8c96-654586538eb5", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "56577627-939e-4f31-8c96-654586538eb5" } } }, @@ -10826,18 +11066,18 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Positional argument providing absolute path to the built index.js file", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/your/cloned/n8n-mcp-server/build/index.js", "default": "/path/to/your/cloned/n8n-mcp-server/build/index.js", "type": "positional", - "value_hint": "/path/to/your/cloned/n8n-mcp-server/build/index.js" + "valueHint": "/path/to/your/cloned/n8n-mcp-server/build/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "http://your-n8n-instance:5678/api/v1", "name": "N8N_API_URL" @@ -10847,9 +11087,9 @@ "name": "N8N_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "n8n-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -10857,10 +11097,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "309e2634-8163-47c9-951e-1cfec85e701b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "309e2634-8163-47c9-951e-1cfec85e701b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "309e2634-8163-47c9-951e-1cfec85e701b" } } }, @@ -10877,71 +11118,71 @@ "packages": [ { "version": "1.0.12", - "package_arguments": [ + "packageArguments": [ { "description": "Comma-separated list", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "T2M,PRECTOTCORR,WS10M", - "value_hint": "T2M,PRECTOTCORR,WS10M" + "valueHint": "T2M,PRECTOTCORR,WS10M" }, { "description": "Community identifier", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "re", - "value_hint": "re" + "valueHint": "re" }, { "description": "Latitude", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "40.7128", - "value_hint": "40.7128" + "valueHint": "40.7128" }, { "description": "Longitude", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "-74.0060", - "value_hint": "-74.0060" + "valueHint": "-74.0060" }, { "description": "Start date (YYYYMMDD)", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "20220101", - "value_hint": "20220101" + "valueHint": "20220101" }, { "description": "End date (YYYYMMDD)", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "20220107", - "value_hint": "20220107" + "valueHint": "20220107" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@programcomputer/nasa-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -10949,10 +11190,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6a44b030-46c7-4390-adf2-2a75652dee27", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6a44b030-46c7-4390-adf2-2a75652dee27", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6a44b030-46c7-4390-adf2-2a75652dee27" } } }, @@ -10969,21 +11211,21 @@ "packages": [ { "version": "0.1.3", - "package_arguments": [ + "packageArguments": [ { "description": "investment_company_type argument", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "investment_company_type", - "value_hint": "N-1A" + "valueHint": "N-1A" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "nasdaq-data-link-mcp-os", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -10991,10 +11233,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "9326c18e-b2fb-4012-a170-cdd5753f0b1e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "9326c18e-b2fb-4012-a170-cdd5753f0b1e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "9326c18e-b2fb-4012-a170-cdd5753f0b1e" } } }, @@ -11011,15 +11254,15 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_NPS_API_KEY", "name": "NPS_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-server-nationalparks", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -11027,10 +11270,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "010904ec-6e39-4bdc-878a-75a6e79d0500", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "010904ec-6e39-4bdc-878a-75a6e79d0500", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "010904ec-6e39-4bdc-878a-75a6e79d0500" } } }, @@ -11047,9 +11291,9 @@ "packages": [ { "version": "0.1.5", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-naver", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -11057,10 +11301,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "f10c234b-cf64-4dc2-9e38-5f57e53aeecb", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "f10c234b-cf64-4dc2-9e38-5f57e53aeecb", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "f10c234b-cf64-4dc2-9e38-5f57e53aeecb" } } }, @@ -11077,9 +11322,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-nba", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -11087,10 +11332,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "9c7c309a-fb3c-4099-b461-0ca725c9083b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "9c7c309a-fb3c-4099-b461-0ca725c9083b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "9c7c309a-fb3c-4099-b461-0ca725c9083b" } } }, @@ -11107,26 +11353,26 @@ "packages": [ { "version": "0.1.6", - "package_arguments": [ + "packageArguments": [ { "description": "/path/to/ns-server/build/index.js", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/ns-server/build/index.js", "default": "/path/to/ns-server/build/index.js", "type": "positional", - "value_hint": "/path/to/ns-server/build/index.js" + "valueHint": "/path/to/ns-server/build/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_key_here", "name": "NS_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "ns-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -11134,10 +11380,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "afcff9a2-a4ed-457f-80fb-8bdd1948771a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "afcff9a2-a4ed-457f-80fb-8bdd1948771a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "afcff9a2-a4ed-457f-80fb-8bdd1948771a" } } }, @@ -11154,7 +11401,7 @@ "packages": [ { "version": "0.1.1", - "environment_variables": [ + "environmentVariables": [ { "description": "bolt://localhost:7687", "name": "NEO4J_URI" @@ -11168,9 +11415,9 @@ "name": "NEO4J_PASSWORD" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@alanse/mcp-neo4j-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -11178,10 +11425,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b4c38c39-7381-49fa-b7b4-75e2604ed93d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b4c38c39-7381-49fa-b7b4-75e2604ed93d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b4c38c39-7381-49fa-b7b4-75e2604ed93d" } } }, @@ -11198,7 +11446,7 @@ "packages": [ { "version": "0.4.2", - "environment_variables": [ + "environmentVariables": [ { "description": "true", "name": "ALLOW_SHELL_COMMANDS" @@ -11208,9 +11456,9 @@ "name": "NVIM_SOCKET_PATH" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-neovim-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -11218,10 +11466,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d9d7e246-d3f4-4214-aa79-fe1981c73c2e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d9d7e246-d3f4-4214-aa79-fe1981c73c2e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d9d7e246-d3f4-4214-aa79-fe1981c73c2e" } } }, @@ -11238,10 +11487,10 @@ "packages": [ { "version": "0.2.5", - "package_arguments": [ + "packageArguments": [ { "description": "-i", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -11250,7 +11499,7 @@ }, { "description": "--rm", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -11259,37 +11508,37 @@ }, { "description": "-e NOMAD_ADDR=http://172.17.0.1:4646", - "is_required": true, + "isRequired": true, "format": "string", "value": "NOMAD_ADDR=http://172.17.0.1:4646", "default": "NOMAD_ADDR=http://172.17.0.1:4646", "type": "named", "name": "-e", - "value_hint": "NOMAD_ADDR=http://172.17.0.1:4646" + "valueHint": "NOMAD_ADDR=http://172.17.0.1:4646" }, { "description": "-e NOMAD_TOKEN=secret-token-acl-optional", - "is_required": true, + "isRequired": true, "format": "string", "value": "NOMAD_TOKEN=secret-token-acl-optional", "default": "NOMAD_TOKEN=secret-token-acl-optional", "type": "named", "name": "-e", - "value_hint": "NOMAD_TOKEN=secret-token-acl-optional" + "valueHint": "NOMAD_TOKEN=secret-token-acl-optional" }, { "description": "kocierik/mcpnomad-server:latest", - "is_required": true, + "isRequired": true, "format": "string", "value": "kocierik/mcpnomad-server:latest", "default": "kocierik/mcpnomad-server:latest", "type": "positional", - "value_hint": "kocierik/mcpnomad-server:latest" + "valueHint": "kocierik/mcpnomad-server:latest" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "kocierik/mcp-nomad", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -11297,10 +11546,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6ebc1c16-ea8d-44eb-958c-74f3f0531058", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6ebc1c16-ea8d-44eb-958c-74f3f0531058", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6ebc1c16-ea8d-44eb-958c-74f3f0531058" } } }, @@ -11317,18 +11567,18 @@ "packages": [ { "version": "1.2.4", - "package_arguments": [ + "packageArguments": [ { "description": "your-built-file-path", - "is_required": true, + "isRequired": true, "format": "string", "value": "your-built-file-path", "default": "your-built-file-path", "type": "positional", - "value_hint": "your-built-file-path" + "valueHint": "your-built-file-path" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your-integration-token", "name": "NOTION_API_TOKEN" @@ -11338,9 +11588,9 @@ "name": "NOTION_MARKDOWN_CONVERSION" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@suekou/mcp-notion-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -11348,10 +11598,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "e9a5215c-6485-462f-b086-6e97f0466b30", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "e9a5215c-6485-462f-b086-6e97f0466b30", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "e9a5215c-6485-462f-b086-6e97f0466b30" } } }, @@ -11368,15 +11619,15 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your_notion_api_key_here", "name": "NOTION_API_KEY" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "notionmcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -11384,10 +11635,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "1455eb68-3cf0-4cc3-a8ee-fd729a00acd3", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "1455eb68-3cf0-4cc3-a8ee-fd729a00acd3", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "1455eb68-3cf0-4cc3-a8ee-fd729a00acd3" } } }, @@ -11404,26 +11656,26 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "Path to the main entry point for ntfy-mcp", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/ntfy-mcp/build/index.js", "default": "/path/to/ntfy-mcp/build/index.js", "type": "positional", - "value_hint": "/path/to/ntfy-mcp/build/index.js" + "valueHint": "/path/to/ntfy-mcp/build/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "NTFY_TOPIC" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "ntfy-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -11431,10 +11683,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "dd3f5299-5869-43ec-89a8-77e25e6a157e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "dd3f5299-5869-43ec-89a8-77e25e6a157e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "dd3f5299-5869-43ec-89a8-77e25e6a157e" } } }, @@ -11451,15 +11704,15 @@ "packages": [ { "version": "1.3.3", - "environment_variables": [ + "environmentVariables": [ { "description": "your-topic-name", "name": "NTFY_TOPIC" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "ntfy-me-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -11467,10 +11720,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ba368d1c-d64d-4ecd-9bde-72304d69c4d1", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ba368d1c-d64d-4ecd-9bde-72304d69c4d1", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ba368d1c-d64d-4ecd-9bde-72304d69c4d1" } } }, @@ -11487,20 +11741,20 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "Path to Obsidian vault", - "is_required": true, + "isRequired": true, "format": "string", "value": "${input:vaultPath}", "default": "${input:vaultPath}", "type": "positional", - "value_hint": "${input:vaultPath}" + "valueHint": "${input:vaultPath}" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-obsidian", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -11508,10 +11762,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ab58cca1-94ad-42d8-be13-980556ac552b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ab58cca1-94ad-42d8-be13-980556ac552b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ab58cca1-94ad-42d8-be13-980556ac552b" } } }, @@ -11528,29 +11783,29 @@ "packages": [ { "version": "1.0.6", - "package_arguments": [ + "packageArguments": [ { "description": "/path/to/your/vault", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/your/vault", "default": "/path/to/your/vault", "type": "positional", - "value_hint": "/path/to/your/vault" + "valueHint": "/path/to/your/vault" }, { "description": "/path/to/your/vault2", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/your/vault2", "default": "/path/to/your/vault2", "type": "positional", - "value_hint": "/path/to/your/vault2" + "valueHint": "/path/to/your/vault2" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "obsidian-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -11558,10 +11813,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "752ef535-2865-4d95-bcc5-647a7be83f74", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "752ef535-2865-4d95-bcc5-647a7be83f74", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "752ef535-2865-4d95-bcc5-647a7be83f74" } } }, @@ -11578,30 +11834,30 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "Named argument --from with value office-powerpoint-mcp-server", - "is_required": true, + "isRequired": true, "format": "string", "value": "office-powerpoint-mcp-server", "default": "office-powerpoint-mcp-server", "type": "named", "name": "--from", - "value_hint": "office-powerpoint-mcp-server" + "valueHint": "office-powerpoint-mcp-server" }, { "description": "Positional argument ppt_mcp_server", - "is_required": true, + "isRequired": true, "format": "string", "value": "ppt_mcp_server", "default": "ppt_mcp_server", "type": "positional", - "value_hint": "ppt_mcp_server" + "valueHint": "ppt_mcp_server" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "office-powerpoint-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -11609,10 +11865,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d3194c4f-b73a-40b2-9170-0e6e8ee713c0", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d3194c4f-b73a-40b2-9170-0e6e8ee713c0", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d3194c4f-b73a-40b2-9170-0e6e8ee713c0" } } }, @@ -11629,19 +11886,19 @@ "packages": [ { "version": "1.1.3", - "package_arguments": [ + "packageArguments": [ { - "is_required": true, + "isRequired": true, "format": "string", "value": "word_mcp_server", "default": "word_mcp_server", "type": "positional", - "value_hint": "word_mcp_server" + "valueHint": "word_mcp_server" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "office-word-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -11649,10 +11906,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4d3dba83-9775-4b5a-9de7-f18f7263460c", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4d3dba83-9775-4b5a-9de7-f18f7263460c", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4d3dba83-9775-4b5a-9de7-f18f7263460c" } } }, @@ -11669,7 +11927,7 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "https://your-domain.okta.com", "name": "OKTA_ORG_URL" @@ -11679,9 +11937,9 @@ "name": "OKTA_API_TOKEN" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "okta-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -11689,10 +11947,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "618671cb-8783-47c7-a81c-164f5f9e2cc1", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "618671cb-8783-47c7-a81c-164f5f9e2cc1", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "618671cb-8783-47c7-a81c-164f5f9e2cc1" } } }, @@ -11709,27 +11968,27 @@ "packages": [ { "version": "0.4.0", - "package_arguments": [ + "packageArguments": [ { "description": "Run Python module openai_websearch_mcp", - "is_required": true, + "isRequired": true, "format": "string", "value": "openai_websearch_mcp", "default": "openai_websearch_mcp", "type": "named", "name": "-m", - "value_hint": "openai_websearch_mcp" + "valueHint": "openai_websearch_mcp" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key-here", "name": "OPENAI_API_KEY" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "openai-websearch-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -11737,10 +11996,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "531956a8-df6a-4edd-bb72-36c284c1d7c8", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "531956a8-df6a-4edd-bb72-36c284c1d7c8", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "531956a8-df6a-4edd-bb72-36c284c1d7c8" } } }, @@ -11757,9 +12017,9 @@ "packages": [ { "version": "2.0.3", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "openapi-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -11767,10 +12027,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "47685d63-d574-4311-b823-c0ddc29d8514", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "47685d63-d574-4311-b823-c0ddc29d8514", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "47685d63-d574-4311-b823-c0ddc29d8514" } } }, @@ -11787,10 +12048,10 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Run in interactive mode", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -11799,7 +12060,7 @@ }, { "description": "Automatically remove the container when it exits", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -11808,47 +12069,47 @@ }, { "description": "Set environment variable OPENAPI_JSON_DOCS_URL", - "is_required": true, + "isRequired": true, "format": "string", "value": "OPENAPI_JSON_DOCS_URL=https://api.example.com/openapi.json", "default": "OPENAPI_JSON_DOCS_URL=https://api.example.com/openapi.json", "type": "named", "name": "-e", - "value_hint": "OPENAPI_JSON_DOCS_URL=https://api.example.com/openapi.json" + "valueHint": "OPENAPI_JSON_DOCS_URL=https://api.example.com/openapi.json" }, { "description": "Set environment variable MCP_API_PREFIX", - "is_required": true, + "isRequired": true, "format": "string", "value": "MCP_API_PREFIX=finance", "default": "MCP_API_PREFIX=finance", "type": "named", "name": "-e", - "value_hint": "MCP_API_PREFIX=finance" + "valueHint": "MCP_API_PREFIX=finance" }, { "description": "Set environment variable GLOBAL_TOOL_PROMPT", - "is_required": true, + "isRequired": true, "format": "string", "value": "GLOBAL_TOOL_PROMPT='Access to insights apis for ACME Financial Services abc.com .", "default": "GLOBAL_TOOL_PROMPT='Access to insights apis for ACME Financial Services abc.com .", "type": "named", "name": "-e", - "value_hint": "GLOBAL_TOOL_PROMPT='Access to insights apis for ACME Financial Services abc.com ." + "valueHint": "GLOBAL_TOOL_PROMPT='Access to insights apis for ACME Financial Services abc.com ." }, { "description": "Docker image name and tag", - "is_required": true, + "isRequired": true, "format": "string", "value": "buryhuang/mcp-server-any-openapi:latest", "default": "buryhuang/mcp-server-any-openapi:latest", "type": "positional", - "value_hint": "buryhuang/mcp-server-any-openapi:latest" + "valueHint": "buryhuang/mcp-server-any-openapi:latest" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-any-openapi", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -11856,10 +12117,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c52271b3-e48e-4896-b5a2-2ff93189b339", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c52271b3-e48e-4896-b5a2-2ff93189b339", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c52271b3-e48e-4896-b5a2-2ff93189b339" } } }, @@ -11876,20 +12138,20 @@ "packages": [ { "version": "0.0.1", - "package_arguments": [ + "packageArguments": [ { "description": "The OpenAPI specification file to be used", - "is_required": true, + "isRequired": true, "format": "string", "value": "/ABSOLUTE/PATH/TO/openapi.yaml", "default": "/ABSOLUTE/PATH/TO/openapi.yaml", "type": "positional", - "value_hint": "/ABSOLUTE/PATH/TO/openapi.yaml" + "valueHint": "/ABSOLUTE/PATH/TO/openapi.yaml" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-openapi-schema", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -11897,10 +12159,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7d68a487-bc40-4783-a2eb-1c9107fc26a4", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7d68a487-bc40-4783-a2eb-1c9107fc26a4", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7d68a487-bc40-4783-a2eb-1c9107fc26a4" } } }, @@ -11917,18 +12180,18 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Positional argument for package execution", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/opencti-server/build/index.js", "default": "path/to/opencti-server/build/index.js", "type": "positional", - "value_hint": "path/to/opencti-server/build/index.js" + "valueHint": "path/to/opencti-server/build/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "${OPENCTI_URL}", "name": "OPENCTI_URL" @@ -11938,9 +12201,9 @@ "name": "OPENCTI_TOKEN" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "opencti-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -11948,10 +12211,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c01d9a66-7a37-4f66-870d-38829c0047ea", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c01d9a66-7a37-4f66-870d-38829c0047ea", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c01d9a66-7a37-4f66-870d-38829c0047ea" } } }, @@ -11968,39 +12232,39 @@ "packages": [ { "version": "0.1.1", - "package_arguments": [ + "packageArguments": [ { "description": "bash", - "is_required": true, + "isRequired": true, "format": "string", "value": "bash", "default": "bash", "type": "positional", - "value_hint": "bash" + "valueHint": "bash" }, { "description": "-c", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "-c", - "value_hint": "-c" + "valueHint": "-c" }, { "description": "cd ~/opendota-mcp-server && source .venv/bin/activate && python src/opendota_server/server.py", - "is_required": true, + "isRequired": true, "format": "string", "value": "cd ~/opendota-mcp-server && source .venv/bin/activate && python src/opendota_server/server.py", "default": "cd ~/opendota-mcp-server && source .venv/bin/activate && python src/opendota_server/server.py", "type": "positional", - "value_hint": "cd ~/opendota-mcp-server && source .venv/bin/activate && python src/opendota_server/server.py" + "valueHint": "cd ~/opendota-mcp-server && source .venv/bin/activate && python src/opendota_server/server.py" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "opendota-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -12008,10 +12272,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a81b1d9e-c1a5-4848-a3f5-350ea2872ae3", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a81b1d9e-c1a5-4848-a3f5-350ea2872ae3", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a81b1d9e-c1a5-4848-a3f5-350ea2872ae3" } } }, @@ -12028,9 +12293,9 @@ "packages": [ { "version": "0.1.2", - "registry_type": "npm", + "registryType": "npm", "identifier": "openrpc-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -12038,10 +12303,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "9c804dd3-4283-4a5b-a34e-6f1c7065b671", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "9c804dd3-4283-4a5b-a34e-6f1c7065b671", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "9c804dd3-4283-4a5b-a34e-6f1c7065b671" } } }, @@ -12058,21 +12324,21 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Specifies the source repository", - "is_required": true, + "isRequired": true, "format": "string", "value": "git+https://github.com/open-strategy-partners/osp_marketing_tools@main", "default": "git+https://github.com/open-strategy-partners/osp_marketing_tools@main", "type": "named", "name": "--from", - "value_hint": "git+https://github.com/open-strategy-partners/osp_marketing_tools@main" + "valueHint": "git+https://github.com/open-strategy-partners/osp_marketing_tools@main" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "osp-marketing-tools", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -12080,10 +12346,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "0d8b287c-6023-4809-a5ba-963c5612efa2", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "0d8b287c-6023-4809-a5ba-963c5612efa2", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "0d8b287c-6023-4809-a5ba-963c5612efa2" } } }, @@ -12100,9 +12367,9 @@ "packages": [ { "version": "0.2.2", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-outline", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -12110,10 +12377,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "d6801d4f-2f27-4e67-8b70-10754b48ff0d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "d6801d4f-2f27-4e67-8b70-10754b48ff0d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "d6801d4f-2f27-4e67-8b70-10754b48ff0d" } } }, @@ -12130,36 +12398,36 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Specify directory to run from", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/pancakeswap-poolspy-mcp", "default": "path/to/pancakeswap-poolspy-mcp", "type": "named", "name": "--directory", - "value_hint": "path/to/pancakeswap-poolspy-mcp" + "valueHint": "path/to/pancakeswap-poolspy-mcp" }, { "description": "Python script to execute", - "is_required": true, + "isRequired": true, "format": "string", "value": "main.py", "default": "main.py", "type": "positional", - "value_hint": "main.py" + "valueHint": "main.py" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your api key from The Graph", "name": "THEGRAPH_API_KEY" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "pancakeswap-poolspy-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -12167,10 +12435,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "925a5d1d-ab12-44bd-9297-a20bdde6ec68", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "925a5d1d-ab12-44bd-9297-a20bdde6ec68", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "925a5d1d-ab12-44bd-9297-a20bdde6ec68" } } }, @@ -12187,9 +12456,9 @@ "packages": [ { "version": "0.3.3", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-pandoc", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -12197,10 +12466,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a0f6fd01-5eb2-4aca-b4a6-c67eb6e0c5da", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a0f6fd01-5eb2-4aca-b4a6-c67eb6e0c5da", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a0f6fd01-5eb2-4aca-b4a6-c67eb6e0c5da" } } }, @@ -12217,50 +12487,50 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "--from mcpdoc", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcpdoc", "default": "mcpdoc", "type": "named", "name": "--from", - "value_hint": "mcpdoc" + "valueHint": "mcpdoc" }, { "description": "mcpdoc", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcpdoc", "default": "mcpdoc", "type": "positional", - "value_hint": "mcpdoc" + "valueHint": "mcpdoc" }, { "description": "--urls Paradex:https://docs.paradex.trade/llms.txt", - "is_required": true, + "isRequired": true, "format": "string", "value": "Paradex:https://docs.paradex.trade/llms.txt", "default": "Paradex:https://docs.paradex.trade/llms.txt", "type": "named", "name": "--urls", - "value_hint": "Paradex:https://docs.paradex.trade/llms.txt" + "valueHint": "Paradex:https://docs.paradex.trade/llms.txt" }, { "description": "--transport stdio", - "is_required": true, + "isRequired": true, "format": "string", "value": "stdio", "default": "stdio", "type": "named", "name": "--transport", - "value_hint": "stdio" + "valueHint": "stdio" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-paradex", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -12268,10 +12538,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "038a3024-c319-4a07-bd7f-9cf699cfebf1", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "038a3024-c319-4a07-bd7f-9cf699cfebf1", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "038a3024-c319-4a07-bd7f-9cf699cfebf1" } } }, @@ -12288,9 +12559,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-pif", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -12298,10 +12569,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "dd586d17-4a7e-4658-92df-8cf6b58bff4d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "dd586d17-4a7e-4658-92df-8cf6b58bff4d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "dd586d17-4a7e-4658-92df-8cf6b58bff4d" } } }, @@ -12318,31 +12590,31 @@ "packages": [ { "version": "0.1.8", - "package_arguments": [ + "packageArguments": [ { "description": "Index name for the Pinecone database.", - "is_required": true, + "isRequired": true, "format": "string", "value": "{your-index-name}", "default": "{your-index-name}", "type": "named", "name": "--index-name", - "value_hint": "{your-index-name}" + "valueHint": "{your-index-name}" }, { "description": "API key for authenticating with Pinecone.", - "is_required": true, + "isRequired": true, "format": "string", "value": "{your-secret-api-key}", "default": "{your-secret-api-key}", "type": "named", "name": "--api-key", - "value_hint": "{your-secret-api-key}" + "valueHint": "{your-secret-api-key}" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-pinecone", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -12350,10 +12622,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "23b81af0-3e03-47b8-a310-c9b07bebd547", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "23b81af0-3e03-47b8-a310-c9b07bebd547", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "23b81af0-3e03-47b8-a310-c9b07bebd547" } } }, @@ -12370,9 +12643,9 @@ "packages": [ { "version": "1.7.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "@felores/placid-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -12380,10 +12653,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "cfe44c73-8b61-48c9-9d7f-b28e98d23b5b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "cfe44c73-8b61-48c9-9d7f-b28e98d23b5b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "cfe44c73-8b61-48c9-9d7f-b28e98d23b5b" } } }, @@ -12400,9 +12674,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "plane-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -12410,10 +12684,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "dd8073c5-c7c4-42c1-a0d7-cad8089de750", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "dd8073c5-c7c4-42c1-a0d7-cad8089de750", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "dd8073c5-c7c4-42c1-a0d7-cad8089de750" } } }, @@ -12430,9 +12705,9 @@ "packages": [ { "version": "1.0.5", - "registry_type": "npm", + "registryType": "npm", "identifier": "@executeautomation/playwright-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -12440,10 +12715,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "328e3069-005e-4179-add1-c13b18db4102", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "328e3069-005e-4179-add1-c13b18db4102", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "328e3069-005e-4179-add1-c13b18db4102" } } }, @@ -12460,9 +12736,9 @@ "packages": [ { "version": "1.0.2", - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-postman", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -12470,10 +12746,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "503a5c73-c147-4b2c-90d3-292378268706", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "503a5c73-c147-4b2c-90d3-292378268706", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "503a5c73-c147-4b2c-90d3-292378268706" } } }, @@ -12490,9 +12767,9 @@ "packages": [ { "version": "0.1.1", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-prefect", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -12500,10 +12777,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "94872987-6992-4fec-ab4b-9ef5311b3108", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "94872987-6992-4fec-ab4b-9ef5311b3108", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "94872987-6992-4fec-ab4b-9ef5311b3108" } } }, @@ -12520,15 +12798,15 @@ "packages": [ { "version": "1.0.1", - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "PRODUCTBOARD_ACCESS_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "productboard-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -12536,10 +12814,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "00613acb-73e2-4f93-8b96-296df17316c8", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "00613acb-73e2-4f93-8b96-296df17316c8", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "00613acb-73e2-4f93-8b96-296df17316c8" } } }, @@ -12556,59 +12835,59 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "Automatically remove the container when it exits.", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--rm", - "value_hint": "--rm" + "valueHint": "--rm" }, { "description": "Keep STDIN open even if not attached.", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "-i", - "value_hint": "-i" + "valueHint": "-i" }, { "description": "Set environment variable PROMETHEUS_URL inside the container.", - "is_required": true, + "isRequired": true, "format": "string", "value": "PROMETHEUS_URL", "default": "PROMETHEUS_URL", "type": "named", "name": "-e", - "value_hint": "PROMETHEUS_URL" + "valueHint": "PROMETHEUS_URL" }, { "description": "Set environment variable PROMETHEUS_USERNAME inside the container.", - "is_required": true, + "isRequired": true, "format": "string", "value": "PROMETHEUS_USERNAME", "default": "PROMETHEUS_USERNAME", "type": "named", "name": "-e", - "value_hint": "PROMETHEUS_USERNAME" + "valueHint": "PROMETHEUS_USERNAME" }, { "description": "Set environment variable PROMETHEUS_PASSWORD inside the container.", - "is_required": true, + "isRequired": true, "format": "string", "value": "PROMETHEUS_PASSWORD", "default": "PROMETHEUS_PASSWORD", "type": "named", "name": "-e", - "value_hint": "PROMETHEUS_PASSWORD" + "valueHint": "PROMETHEUS_PASSWORD" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "http://your-prometheus-server:9090", "name": "PROMETHEUS_URL" @@ -12622,9 +12901,9 @@ "name": "PROMETHEUS_PASSWORD" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "prometheus_mcp_server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -12632,10 +12911,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "cf42caa8-50d1-489d-aa3c-3e8432efe9e2", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "cf42caa8-50d1-489d-aa3c-3e8432efe9e2", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "cf42caa8-50d1-489d-aa3c-3e8432efe9e2" } } }, @@ -12652,9 +12932,9 @@ "packages": [ { "version": "0.1.5", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "pubchem_mcp_server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -12662,10 +12942,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "68966508-9094-4eb5-9588-ff7456d6c1ce", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "68966508-9094-4eb5-9588-ff7456d6c1ce", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "68966508-9094-4eb5-9588-ff7456d6c1ce" } } }, @@ -12682,66 +12963,66 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "-i", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "-i", - "value_hint": "-i" + "valueHint": "-i" }, { "description": "--rm", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--rm", - "value_hint": "--rm" + "valueHint": "--rm" }, { "description": "--name pulumi-mcp-server", - "is_required": true, + "isRequired": true, "format": "string", "value": "pulumi-mcp-server", "default": "pulumi-mcp-server", "type": "named", "name": "--name", - "value_hint": "pulumi-mcp-server" + "valueHint": "pulumi-mcp-server" }, { "description": "-e PULUMI_ACCESS_TOKEN", - "is_required": true, + "isRequired": true, "format": "string", "value": "PULUMI_ACCESS_TOKEN", "default": "PULUMI_ACCESS_TOKEN", "type": "named", "name": "-e", - "value_hint": "PULUMI_ACCESS_TOKEN" + "valueHint": "PULUMI_ACCESS_TOKEN" }, { "description": "dogukanakkaya/pulumi-mcp-server", - "is_required": true, + "isRequired": true, "format": "string", "value": "dogukanakkaya/pulumi-mcp-server", "default": "dogukanakkaya/pulumi-mcp-server", "type": "positional", - "value_hint": "dogukanakkaya/pulumi-mcp-server" + "valueHint": "dogukanakkaya/pulumi-mcp-server" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "${YOUR_TOKEN}", "name": "PULUMI_ACCESS_TOKEN" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "pulumi-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -12749,10 +13030,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4f9043b6-e17a-494e-89d4-52c3f39999ac", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4f9043b6-e17a-494e-89d4-52c3f39999ac", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4f9043b6-e17a-494e-89d4-52c3f39999ac" } } }, @@ -12769,9 +13051,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "puppeteer-vision-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -12779,10 +13061,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7997496a-c366-4949-9ca7-6741bcfdf2a0", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7997496a-c366-4949-9ca7-6741bcfdf2a0", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7997496a-c366-4949-9ca7-6741bcfdf2a0" } } }, @@ -12799,40 +13082,40 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "start", - "is_required": true, + "isRequired": true, "format": "string", "value": "start", "default": "start", "type": "positional", - "value_hint": "start" + "valueHint": "start" }, { "description": "--token YOUR_TOKEN", - "is_required": true, + "isRequired": true, "format": "string", "value": "YOUR_TOKEN", "default": "YOUR_TOKEN", "type": "named", "name": "--token", - "value_hint": "YOUR_TOKEN" + "valueHint": "YOUR_TOKEN" }, { "description": "--user YOUR_USER", - "is_required": true, + "isRequired": true, "format": "string", "value": "YOUR_USER", "default": "YOUR_USER", "type": "named", "name": "--user", - "value_hint": "YOUR_USER" + "valueHint": "YOUR_USER" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "pushover-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -12840,10 +13123,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "61ffe82e-5288-4af8-a45f-9a0907c941de", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "61ffe82e-5288-4af8-a45f-9a0907c941de", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "61ffe82e-5288-4af8-a45f-9a0907c941de" } } }, @@ -12860,9 +13144,9 @@ "packages": [ { "version": "1.0.6", - "registry_type": "npm", + "registryType": "npm", "identifier": "@gongrzhe/quickchart-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -12870,10 +13154,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "904d15ba-e312-4dec-88b6-f52c1077bc96", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "904d15ba-e312-4dec-88b6-f52c1077bc96", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "904d15ba-e312-4dec-88b6-f52c1077bc96" } } }, @@ -12890,15 +13175,15 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key-here", "name": "DASHSCOPE_API_KEY" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "qwen_max", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -12906,10 +13191,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "92c66a82-172a-45e6-92a4-ee6a053e95e6", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "92c66a82-172a-45e6-92a4-ee6a053e95e6", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "92c66a82-172a-45e6-92a4-ee6a053e95e6" } } }, @@ -12926,9 +13212,9 @@ "packages": [ { "version": "0.1.3", - "registry_type": "npm", + "registryType": "npm", "identifier": "@apify/mcp-server-rag-web-browser", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -12936,10 +13222,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "abcd869f-0159-408c-8965-9dbcc8c2d001", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "abcd869f-0159-408c-8965-9dbcc8c2d001", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "abcd869f-0159-408c-8965-9dbcc8c2d001" } } }, @@ -12956,26 +13243,26 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "PATH_TO_BUILD/index.js", - "is_required": true, + "isRequired": true, "format": "string", "value": "PATH_TO_BUILD/index.js", "default": "PATH_TO_BUILD/index.js", "type": "positional", - "value_hint": "PATH_TO_BUILD/index.js" + "valueHint": "PATH_TO_BUILD/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_access_token_here", "name": "RAINDROP_TOKEN" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "raindrop-io-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -12983,10 +13270,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ddfb0c36-c116-4333-a62e-c9447d699b6e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ddfb0c36-c116-4333-a62e-c9447d699b6e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ddfb0c36-c116-4333-a62e-c9447d699b6e" } } }, @@ -13003,9 +13291,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "reaper-mcp-server", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -13013,10 +13301,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c214300b-5fcc-48fb-ad3a-bb2d14b0403d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c214300b-5fcc-48fb-ad3a-bb2d14b0403d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c214300b-5fcc-48fb-ad3a-bb2d14b0403d" } } }, @@ -13033,29 +13322,29 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "Docker image to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp/redis", "default": "mcp/redis", "type": "positional", - "value_hint": "mcp/redis" + "valueHint": "mcp/redis" }, { "description": "Redis server connection string", - "is_required": true, + "isRequired": true, "format": "string", "value": "redis://host.docker.internal:6379", "default": "redis://host.docker.internal:6379", "type": "positional", - "value_hint": "host.docker.internal:6379" + "valueHint": "host.docker.internal:6379" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "@gongrzhe/server-redis-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -13063,10 +13352,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "01129bff-3d65-4e3d-8e82-6f2f269f818c", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "01129bff-3d65-4e3d-8e82-6f2f269f818c", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "01129bff-3d65-4e3d-8e82-6f2f269f818c" } } }, @@ -13083,9 +13373,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-redis", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13093,10 +13383,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "8f234bf9-d65f-4406-bed6-f8217adee4c9", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "8f234bf9-d65f-4406-bed6-f8217adee4c9", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "8f234bf9-d65f-4406-bed6-f8217adee4c9" } } }, @@ -13113,15 +13404,15 @@ "packages": [ { "version": "0.1.5", - "environment_variables": [ + "environmentVariables": [ { "description": "your_rememberizer_api_token", "name": "REMEMBERIZER_API_TOKEN" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-server-rememberizer", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13129,10 +13420,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "b5ee338d-655b-4067-9e17-f1bfc442a1eb", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "b5ee338d-655b-4067-9e17-f1bfc442a1eb", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "b5ee338d-655b-4067-9e17-f1bfc442a1eb" } } }, @@ -13149,15 +13441,15 @@ "packages": [ { "version": "0.1.1", - "environment_variables": [ + "environmentVariables": [ { "description": "your_token_here", "name": "REPLICATE_API_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-replicate", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -13165,10 +13457,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ab0a0d85-7031-4eb0-bd01-5db69fb8c667", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ab0a0d85-7031-4eb0-bd01-5db69fb8c667", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ab0a0d85-7031-4eb0-bd01-5db69fb8c667" } } }, @@ -13185,9 +13478,9 @@ "packages": [ { "version": "0.1.13", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-rquest", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13195,10 +13488,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "0c43f128-7589-4ce6-9382-5399ba24bebd", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "0c43f128-7589-4ce6-9382-5399ba24bebd", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "0c43f128-7589-4ce6-9382-5399ba24bebd" } } }, @@ -13215,15 +13509,15 @@ "packages": [ { "version": "1.0.4", - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_key_here", "name": "RIJKSMUSEUM_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-server-rijksmuseum", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -13231,10 +13525,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6a64a548-c36c-400f-b43c-4d977aa1e482", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6a64a548-c36c-400f-b43c-4d977aa1e482", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6a64a548-c36c-400f-b43c-4d977aa1e482" } } }, @@ -13251,9 +13546,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "riot", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13261,10 +13556,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "87e2c1e7-4fdb-436f-b52c-af683f63fb1b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "87e2c1e7-4fdb-436f-b52c-af683f63fb1b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "87e2c1e7-4fdb-436f-b52c-af683f63fb1b" } } }, @@ -13281,9 +13577,9 @@ "packages": [ { "version": "0.1.3", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-salesforce-connector", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13291,10 +13587,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "0e45cb5a-5b45-47f3-8b5e-12bdf88d176a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "0e45cb5a-5b45-47f3-8b5e-12bdf88d176a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "0e45cb5a-5b45-47f3-8b5e-12bdf88d176a" } } }, @@ -13311,9 +13608,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-scholarly", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13321,10 +13618,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "f43b2576-74d3-4b79-b9d0-0c5816835369", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "f43b2576-74d3-4b79-b9d0-0c5816835369", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "f43b2576-74d3-4b79-b9d0-0c5816835369" } } }, @@ -13341,9 +13639,9 @@ "packages": [ { "version": "0.1.6", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "scrapling-fetch-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13351,10 +13649,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "874336ad-3dfa-467f-8356-3de7d8b2b93d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "874336ad-3dfa-467f-8356-3de7d8b2b93d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "874336ad-3dfa-467f-8356-3de7d8b2b93d" } } }, @@ -13371,47 +13670,47 @@ "packages": [ { "version": "0.4.6", - "package_arguments": [ + "packageArguments": [ { "description": "Run an image", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "-i", - "value_hint": "-i" + "valueHint": "-i" }, { "description": "Remove container after run", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--rm", - "value_hint": "--rm" + "valueHint": "--rm" }, { "description": "Set environment variable in container", - "is_required": true, + "isRequired": true, "format": "string", "value": "SEARXNG_URL", "default": "SEARXNG_URL", "type": "named", "name": "-e", - "value_hint": "SEARXNG_URL" + "valueHint": "SEARXNG_URL" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_SEARXNG_INSTANCE_URL", "name": "SEARXNG_URL" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-searxng", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -13419,10 +13718,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "02cdb980-1dcd-4345-a8d1-d3f3f522d04b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "02cdb980-1dcd-4345-a8d1-d3f3f522d04b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "02cdb980-1dcd-4345-a8d1-d3f3f522d04b" } } }, @@ -13439,9 +13739,9 @@ "packages": [ { "version": "0.1.1", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "sec-edgar-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13449,10 +13749,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "8d526532-7125-4b3c-b180-901914ead390", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "8d526532-7125-4b3c-b180-901914ead390", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "8d526532-7125-4b3c-b180-901914ead390" } } }, @@ -13469,31 +13770,31 @@ "packages": [ { "version": "1.0.5", - "package_arguments": [ + "packageArguments": [ { "description": "--accessToken ", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--accessToken", - "value_hint": "" + "valueHint": "" }, { "description": "--domain .myshopify.com", - "is_required": true, + "isRequired": true, "format": "string", "value": ".myshopify.com", "default": ".myshopify.com", "type": "named", "name": "--domain", - "value_hint": ".myshopify.com" + "valueHint": ".myshopify.com" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "shopify-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -13501,10 +13802,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "fcde90d4-5b99-4262-8101-7a507bf05915", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "fcde90d4-5b99-4262-8101-7a507bf05915", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "fcde90d4-5b99-4262-8101-7a507bf05915" } } }, @@ -13521,9 +13823,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-server-siri-shortcuts", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -13531,10 +13833,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "fbef362d-ba4b-4708-8579-332d2a57582d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "fbef362d-ba4b-4708-8579-332d2a57582d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "fbef362d-ba4b-4708-8579-332d2a57582d" } } }, @@ -13551,40 +13854,40 @@ "packages": [ { "version": "0.4.0", - "package_arguments": [ + "packageArguments": [ { "description": "--python=3.12", - "is_required": true, + "isRequired": true, "format": "string", "value": "3.12", "default": "3.12", "type": "named", "name": "--python", - "value_hint": "3.12" + "valueHint": "3.12" }, { "description": "--directory /absolute/path/to/mcp_snowflake_server", - "is_required": true, + "isRequired": true, "format": "string", "value": "/absolute/path/to/mcp_snowflake_server", "default": "/absolute/path/to/mcp_snowflake_server", "type": "named", "name": "--directory", - "value_hint": "/absolute/path/to/mcp_snowflake_server" + "valueHint": "/absolute/path/to/mcp_snowflake_server" }, { "description": "mcp_snowflake_server", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp_snowflake_server", "default": "mcp_snowflake_server", "type": "positional", - "value_hint": "mcp_snowflake_server" + "valueHint": "mcp_snowflake_server" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp_snowflake_server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13592,10 +13895,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "61942e80-99c9-4856-90c8-5a11ac76ade5", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "61942e80-99c9-4856-90c8-5a11ac76ade5", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "61942e80-99c9-4856-90c8-5a11ac76ade5" } } }, @@ -13612,9 +13916,9 @@ "packages": [ { "version": "3.2.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-solver", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13622,10 +13926,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "523175e8-6767-4387-af85-a46f256a6390", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "523175e8-6767-4387-af85-a46f256a6390", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "523175e8-6767-4387-af85-a46f256a6390" } } }, @@ -13642,9 +13947,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-soccer-data", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -13652,10 +13957,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "387ef1e6-0e4c-43ea-9416-bf3b399a3c76", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "387ef1e6-0e4c-43ea-9416-bf3b399a3c76", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "387ef1e6-0e4c-43ea-9416-bf3b399a3c76" } } }, @@ -13672,9 +13978,9 @@ "packages": [ { "version": "2.0.3", - "registry_type": "npm", + "registryType": "npm", "identifier": "solana-agent-kit", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -13682,10 +13988,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "f25f6cdb-0623-4a04-bac2-f1b26331b432", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "f25f6cdb-0623-4a04-bac2-f1b26331b432", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "f25f6cdb-0623-4a04-bac2-f1b26331b432" } } }, @@ -13702,28 +14009,28 @@ "packages": [ { "version": "0.2.0", - "package_arguments": [ + "packageArguments": [ { "description": "Set the working directory", - "is_required": true, + "isRequired": true, "format": "string", "value": "/path/to/spotify_mcp", "default": "/path/to/spotify_mcp", "type": "named", "name": "--directory", - "value_hint": "/path/to/spotify_mcp" + "valueHint": "/path/to/spotify_mcp" }, { "description": "Program to run", - "is_required": true, + "isRequired": true, "format": "string", "value": "spotify-mcp", "default": "spotify-mcp", "type": "positional", - "value_hint": "spotify-mcp" + "valueHint": "spotify-mcp" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_CLIENT_ID", "name": "SPOTIFY_CLIENT_ID" @@ -13737,9 +14044,9 @@ "name": "SPOTIFY_REDIRECT_URI" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "spotify-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13747,10 +14054,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "20c38c50-831e-478a-9f52-064d3ad8a6ce", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "20c38c50-831e-478a-9f52-064d3ad8a6ce", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "20c38c50-831e-478a-9f52-064d3ad8a6ce" } } }, @@ -13767,9 +14075,9 @@ "packages": [ { "version": "1.0.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "strava-mcp-server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13777,10 +14085,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "09a2ecf8-1774-490e-8542-2b25a6445a58", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "09a2ecf8-1774-490e-8542-2b25a6445a58", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "09a2ecf8-1774-490e-8542-2b25a6445a58" } } }, @@ -13797,21 +14106,21 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "charge_id argument", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "charge_id", - "value_hint": "ch_abc123" + "valueHint": "ch_abc123" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-stripe", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -13819,10 +14128,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "e532ff07-269a-47fb-98ad-6315d7081ccb", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "e532ff07-269a-47fb-98ad-6315d7081ccb", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "e532ff07-269a-47fb-98ad-6315d7081ccb" } } }, @@ -13839,9 +14149,9 @@ "packages": [ { "version": "0.2.1", - "registry_type": "npm", + "registryType": "npm", "identifier": "cursor-talk-to-figma-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -13849,10 +14159,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "9826cb7a-bc6f-41d9-b9b7-f76f781c1eca", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "9826cb7a-bc6f-41d9-b9b7-f76f781c1eca", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "9826cb7a-bc6f-41d9-b9b7-f76f781c1eca" } } }, @@ -13869,15 +14180,15 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_key_here", "name": "TMDB_API_KEY" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-tmdb", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -13885,10 +14196,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ff2b0e88-9426-4aa1-bfb1-165cc810344f", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ff2b0e88-9426-4aa1-bfb1-165cc810344f", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ff2b0e88-9426-4aa1-bfb1-165cc810344f" } } }, @@ -13905,27 +14217,27 @@ "packages": [ { "version": "0.1.8", - "package_arguments": [ + "packageArguments": [ { "description": "Python module execution: -m mcp_server_tavily", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp_server_tavily", "default": "mcp_server_tavily", "type": "named", "name": "-m", - "value_hint": "mcp_server_tavily" + "valueHint": "mcp_server_tavily" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_key_here", "name": "TAVILY_API_KEY" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp_tavily", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -13933,10 +14245,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "bdeb1cca-49ce-476a-87a2-f27c30b086bd", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "bdeb1cca-49ce-476a-87a2-f27c30b086bd", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "bdeb1cca-49ce-476a-87a2-f27c30b086bd" } } }, @@ -13953,9 +14266,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "teradata-mcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -13963,10 +14276,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "cb9e2dc2-e335-4271-8e8d-5aff43cd389b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "cb9e2dc2-e335-4271-8e8d-5aff43cd389b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "cb9e2dc2-e335-4271-8e8d-5aff43cd389b" } } }, @@ -13983,21 +14297,21 @@ "packages": [ { "version": "0.1.8", - "package_arguments": [ + "packageArguments": [ { "description": "Positional module argument to run the module terminal_controller with python", - "is_required": true, + "isRequired": true, "format": "string", "value": "terminal_controller", "default": "terminal_controller", "type": "named", "name": "-m", - "value_hint": "terminal_controller" + "valueHint": "terminal_controller" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "terminal-controller", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -14005,10 +14319,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6275eefc-3f97-4a30-85ca-9678de62bdcf", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6275eefc-3f97-4a30-85ca-9678de62bdcf", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6275eefc-3f97-4a30-85ca-9678de62bdcf" } } }, @@ -14025,41 +14340,41 @@ "packages": [ { "version": "0.1.3", - "package_arguments": [ + "packageArguments": [ { "description": "", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--apiKey", - "value_hint": "" + "valueHint": "" }, { "description": "", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--gameName", - "value_hint": "" + "valueHint": "" }, { "description": "", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--tagLine", - "value_hint": "" + "valueHint": "" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "mcp-server-tft", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -14067,10 +14382,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "1aa1e801-80d9-4ea1-80c2-e7d037ce98e3", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "1aa1e801-80d9-4ea1-80c2-e7d037ce98e3", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "1aa1e801-80d9-4ea1-80c2-e7d037ce98e3" } } }, @@ -14087,36 +14403,36 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Specifies the directory to run the application from", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/thegraph-mcp", "default": "path/to/thegraph-mcp", "type": "named", "name": "--directory", - "value_hint": "path/to/thegraph-mcp" + "valueHint": "path/to/thegraph-mcp" }, { "description": "Main python file to execute", - "is_required": true, + "isRequired": true, "format": "string", "value": "main.py", "default": "main.py", "type": "positional", - "value_hint": "main.py" + "valueHint": "main.py" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_key_here", "name": "THEGRAPH_API_KEY" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "thegraph-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -14124,10 +14440,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ea41dc54-96fd-41db-90ec-92a1a45e7151", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ea41dc54-96fd-41db-90ec-92a1a45e7151", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ea41dc54-96fd-41db-90ec-92a1a45e7151" } } }, @@ -14144,15 +14461,15 @@ "packages": [ { "version": "0.2.5", - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-key-here", "name": "TICKETMASTER_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@delorenj/mcp-server-ticketmaster", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -14160,10 +14477,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7f7268e0-670a-4630-83da-acc1090264c3", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7f7268e0-670a-4630-83da-acc1090264c3", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7f7268e0-670a-4630-83da-acc1090264c3" } } }, @@ -14180,68 +14498,68 @@ "packages": [ { "version": "1.1.9", - "package_arguments": [ + "packageArguments": [ { "description": "Run container in interactive mode", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "-i", - "value_hint": "-i" + "valueHint": "-i" }, { "description": "Automatically remove the container when it exits", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--rm", - "value_hint": "--rm" + "valueHint": "--rm" }, { "description": "Set the TICKTICK_CLIENT_ID environment variable in the container", - "is_required": true, + "isRequired": true, "format": "string", "value": "TICKTICK_CLIENT_ID", "default": "TICKTICK_CLIENT_ID", "type": "named", "name": "-e", - "value_hint": "TICKTICK_CLIENT_ID" + "valueHint": "TICKTICK_CLIENT_ID" }, { "description": "Set the TICKTICK_CLIENT_SECRET environment variable in the container", - "is_required": true, + "isRequired": true, "format": "string", "value": "TICKTICK_CLIENT_SECRET", "default": "TICKTICK_CLIENT_SECRET", "type": "named", "name": "-e", - "value_hint": "TICKTICK_CLIENT_SECRET" + "valueHint": "TICKTICK_CLIENT_SECRET" }, { "description": "Set the TICKTICK_ACCESS_TOKEN environment variable in the container", - "is_required": true, + "isRequired": true, "format": "string", "value": "TICKTICK_ACCESS_TOKEN", "default": "TICKTICK_ACCESS_TOKEN", "type": "named", "name": "-e", - "value_hint": "TICKTICK_ACCESS_TOKEN" + "valueHint": "TICKTICK_ACCESS_TOKEN" }, { "description": "Docker image name", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp/ticktick", "default": "mcp/ticktick", "type": "positional", - "value_hint": "mcp/ticktick" + "valueHint": "mcp/ticktick" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "", "name": "TICKTICK_CLIENT_ID" @@ -14255,9 +14573,9 @@ "name": "TICKTICK_ACCESS_TOKEN" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "@alexarevalo.ai/mcp-server-ticktick", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -14265,10 +14583,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "5c1709d9-3f57-4dbd-a727-5ce383a59c32", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "5c1709d9-3f57-4dbd-a727-5ce383a59c32", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "5c1709d9-3f57-4dbd-a727-5ce383a59c32" } } }, @@ -14285,15 +14604,15 @@ "packages": [ { "version": "0.1.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_token_here", "name": "TODOIST_API_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@abhiz123/todoist-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -14301,10 +14620,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "f79220af-20c6-4d21-b4f6-13f176b7f1d8", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "f79220af-20c6-4d21-b4f6-13f176b7f1d8", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "f79220af-20c6-4d21-b4f6-13f176b7f1d8" } } }, @@ -14321,18 +14641,18 @@ "packages": [ { "version": "1.0.1", - "package_arguments": [ + "packageArguments": [ { "description": "Path to the server entry point", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/token-minter-mcp/server/index.js", "default": "path/to/token-minter-mcp/server/index.js", "type": "positional", - "value_hint": "path/to/token-minter-mcp/server/index.js" + "valueHint": "path/to/token-minter-mcp/server/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your infura key", "name": "INFURA_KEY" @@ -14342,9 +14662,9 @@ "name": "PRIVATE_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "token-minter-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -14352,10 +14672,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "10bb9deb-9384-4e4d-935e-9d830015a43e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "10bb9deb-9384-4e4d-935e-9d830015a43e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "10bb9deb-9384-4e4d-935e-9d830015a43e" } } }, @@ -14372,7 +14693,7 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your moralis api key", "name": "MORALIS_API_KEY" @@ -14382,9 +14703,9 @@ "name": "PRIVATE_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "token-revoke-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -14392,10 +14713,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4bd856fc-761e-43e3-9236-7b996b6b7ec7", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4bd856fc-761e-43e3-9236-7b996b6b7ec7", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4bd856fc-761e-43e3-9236-7b996b6b7ec7" } } }, @@ -14412,51 +14734,51 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "The Typesense server host", - "is_required": true, + "isRequired": true, "format": "string", "value": "your-typesense-host", "default": "your-typesense-host", "type": "named", "name": "--host", - "value_hint": "your-typesense-host" + "valueHint": "your-typesense-host" }, { "description": "The Typesense server port", - "is_required": true, + "isRequired": true, "format": "string", "value": "8108", "default": "8108", "type": "named", "name": "--port", - "value_hint": "8108" + "valueHint": "8108" }, { "description": "The Typesense server protocol", - "is_required": true, + "isRequired": true, "format": "string", "value": "http", "default": "http", "type": "named", "name": "--protocol", - "value_hint": "http" + "valueHint": "http" }, { "description": "The Typesense API key", - "is_required": true, + "isRequired": true, "format": "string", "value": "your-api-key", "default": "your-api-key", "type": "named", "name": "--api-key", - "value_hint": "your-api-key" + "valueHint": "your-api-key" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "typesense-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -14464,10 +14786,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a038d159-c51e-49ef-aa02-c794e8a5cb94", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a038d159-c51e-49ef-aa02-c794e8a5cb94", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a038d159-c51e-49ef-aa02-c794e8a5cb94" } } }, @@ -14484,15 +14807,15 @@ "packages": [ { "version": "0.1.2", - "environment_variables": [ + "environmentVariables": [ { "description": "your_google_maps_api_key", "name": "GOOGLE_MAPS_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@gongrzhe/server-travelplanner-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -14500,10 +14823,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "7d8aa739-c9c6-4afd-991b-cf425be475db", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "7d8aa739-c9c6-4afd-991b-cf425be475db", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "7d8aa739-c9c6-4afd-991b-cf425be475db" } } }, @@ -14520,25 +14844,25 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { - "is_required": true, + "isRequired": true, "format": "string", "value": "run main.py", "default": "run main.py", "type": "positional", - "value_hint": "main.py" + "valueHint": "main.py" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your api key from The Graph", "name": "THEGRAPH_API_KEY" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "uniswap-poolspy-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -14546,10 +14870,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "1ff3b09d-5c19-4254-849f-34244dc6ee88", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "1ff3b09d-5c19-4254-849f-34244dc6ee88", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "1ff3b09d-5c19-4254-849f-34244dc6ee88" } } }, @@ -14566,18 +14891,18 @@ "packages": [ { "version": "1.0.1", - "package_arguments": [ + "packageArguments": [ { "description": "Path to main entry file", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/uniswap-trader-mcp/server/index.js", "default": "path/to/uniswap-trader-mcp/server/index.js", "type": "positional", - "value_hint": "path/to/uniswap-trader-mcp/server/index.js" + "valueHint": "path/to/uniswap-trader-mcp/server/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your infura key", "name": "INFURA_KEY" @@ -14587,9 +14912,9 @@ "name": "WALLET_PRIVATE_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "uniswap-trader-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -14597,10 +14922,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "1dd6d7a5-ba98-4fce-b4a4-d0541df84569", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "1dd6d7a5-ba98-4fce-b4a4-d0541df84569", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "1dd6d7a5-ba98-4fce-b4a4-d0541df84569" } } }, @@ -14617,10 +14943,10 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Remove container after run", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -14629,7 +14955,7 @@ }, { "description": "Keep STDIN open even if not attached", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", @@ -14638,38 +14964,38 @@ }, { "description": "Specify Unity Catalog server URL", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--uc_server", - "value_hint": "" + "valueHint": "" }, { "description": "Specify Unity Catalog name", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--uc_catalog", - "value_hint": "" + "valueHint": "" }, { "description": "Specify Unity Catalog schema name", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "named", "name": "--uc_schema", - "value_hint": "" + "valueHint": "" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-unitycatalog", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -14677,10 +15003,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "51d74701-2a57-476f-a5ed-75a93be58f42", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "51d74701-2a57-476f-a5ed-75a93be58f42", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "51d74701-2a57-476f-a5ed-75a93be58f42" } } }, @@ -14697,9 +15024,9 @@ "packages": [ { "version": "1.0.2", - "registry_type": "oci", + "registryType": "oci", "identifier": "com.gamelovers.mcp-unity", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -14707,10 +15034,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "3cccaee3-1b35-4a97-bc23-d1a8603aa366", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "3cccaee3-1b35-4a97-bc23-d1a8603aa366", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "3cccaee3-1b35-4a97-bc23-d1a8603aa366" } } }, @@ -14727,15 +15055,15 @@ "packages": [ { "version": "0.0.1", - "environment_variables": [ + "environmentVariables": [ { "description": "5010", "name": "MCP_WEBSOCKET_PORT" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "com.quaza.unitymcp", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -14743,10 +15071,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "162d7f33-0f96-47d7-980b-361fb0ddc381", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "162d7f33-0f96-47d7-980b-361fb0ddc381", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "162d7f33-0f96-47d7-980b-361fb0ddc381" } } }, @@ -14763,9 +15092,9 @@ "packages": [ { "version": "0.0.1", - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-vegalite", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -14773,10 +15102,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "aa301cee-889b-4606-b66b-fd9dc1e77817", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "aa301cee-889b-4606-b66b-fd9dc1e77817", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "aa301cee-889b-4606-b66b-fd9dc1e77817" } } }, @@ -14793,45 +15123,45 @@ "packages": [ { "version": "0.1.25", - "package_arguments": [ + "packageArguments": [ { "description": "Directory to use", - "is_required": true, + "isRequired": true, "format": "string", "value": "/Users//video-jungle-mcp", "default": "/Users//video-jungle-mcp", "type": "named", "name": "--directory", - "value_hint": "/Users//video-jungle-mcp" + "valueHint": "/Users//video-jungle-mcp" }, { "description": "Script or module name", - "is_required": true, + "isRequired": true, "format": "string", "value": "video-editor-mcp", "default": "video-editor-mcp", "type": "positional", - "value_hint": "video-editor-mcp" + "valueHint": "video-editor-mcp" }, { "description": "API Key input", - "is_required": true, + "isRequired": true, "format": "string", "value": "", "default": "", "type": "positional", - "value_hint": "" + "valueHint": "" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "1", "name": "LOAD_PHOTOS_DB" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "video-editor-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -14839,10 +15169,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "6b136dc5-ffcf-41b0-bf5f-e5dff5d47981", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "6b136dc5-ffcf-41b0-bf5f-e5dff5d47981", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "6b136dc5-ffcf-41b0-bf5f-e5dff5d47981" } } }, @@ -14859,7 +15190,7 @@ "packages": [ { "version": "0.0.77", - "environment_variables": [ + "environmentVariables": [ { "description": "http://192.168.1.100:8188", "name": "comfy_url" @@ -14877,9 +15208,9 @@ "name": "comfy_params" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@mfukushim/map-traveler-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -14887,10 +15218,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "8b5bb45d-a025-4e7b-a185-dbb5e349af32", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "8b5bb45d-a025-4e7b-a185-dbb5e349af32", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "8b5bb45d-a025-4e7b-a185-dbb5e349af32" } } }, @@ -14907,27 +15239,27 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "Git repository URL with subdirectory parameter", - "is_required": true, + "isRequired": true, "format": "string", "value": "git+https://github.com/volcengine/ai-app-lab#subdirectory=mcp/server/mcp_server_tos", "default": "git+https://github.com/volcengine/ai-app-lab#subdirectory=mcp/server/mcp_server_tos", "type": "positional", - "value_hint": "git+https://github.com/volcengine/ai-app-lab#subdirectory=mcp/server/mcp_server_tos" + "valueHint": "git+https://github.com/volcengine/ai-app-lab#subdirectory=mcp/server/mcp_server_tos" }, { "description": "Server entry point", - "is_required": true, + "isRequired": true, "format": "string", "value": "mcp-server-tos", "default": "mcp-server-tos", "type": "positional", - "value_hint": "mcp-server-tos" + "valueHint": "mcp-server-tos" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your ak", "name": "VOLC_ACCESSKEY" @@ -14953,9 +15285,9 @@ "name": "TOS_BUCKET" } ], - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-server-tos", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -14963,10 +15295,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "5f14d558-f478-43b5-8dde-20c9997f196a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "5f14d558-f478-43b5-8dde-20c9997f196a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "5f14d558-f478-43b5-8dde-20c9997f196a" } } }, @@ -14983,26 +15316,26 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "Path to the entry point script", - "is_required": true, + "isRequired": true, "format": "string", "value": "/ABSOLUTE/PATH/TO/YOUR/build/index.js", "default": "/ABSOLUTE/PATH/TO/YOUR/build/index.js", "type": "positional", - "value_hint": "/ABSOLUTE/PATH/TO/YOUR/build/index.js" + "valueHint": "/ABSOLUTE/PATH/TO/YOUR/build/index.js" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your-api-token", "name": "WEBFLOW_API_TOKEN" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "webflow-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15010,10 +15343,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c7876b07-1fe3-4006-a104-93ef9f9e1669", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c7876b07-1fe3-4006-a104-93ef9f9e1669", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c7876b07-1fe3-4006-a104-93ef9f9e1669" } } }, @@ -15030,9 +15364,9 @@ "packages": [ { "version": "1.0.1", - "registry_type": "npm", + "registryType": "npm", "identifier": "@bharathvaj/whois-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15040,10 +15374,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "5f5a497c-673d-4988-b86b-c3bcaaf1a317", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "5f5a497c-673d-4988-b86b-c3bcaaf1a317", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "5f5a497c-673d-4988-b86b-c3bcaaf1a317" } } }, @@ -15060,9 +15395,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "mcp-wikidata", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -15070,10 +15405,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "02b79b89-cce8-4401-aa1f-255b01587266", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "02b79b89-cce8-4401-aa1f-255b01587266", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "02b79b89-cce8-4401-aa1f-255b01587266" } } }, @@ -15090,9 +15426,9 @@ "packages": [ { "version": "0.2.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "@simonb97/server-win-cli", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15100,10 +15436,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a8a08cbd-074f-49ba-8f98-3ef8583cc93b", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a8a08cbd-074f-49ba-8f98-3ef8583cc93b", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a8a08cbd-074f-49ba-8f98-3ef8583cc93b" } } }, @@ -15120,30 +15457,30 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { "description": "The directory to use", - "is_required": true, + "isRequired": true, "format": "string", "value": "path/to/world_bank_mcp_server", "default": "path/to/world_bank_mcp_server", "type": "named", "name": "--directory", - "value_hint": "path/to/world_bank_mcp_server" + "valueHint": "path/to/world_bank_mcp_server" }, { "description": "The server script/module to execute", - "is_required": true, + "isRequired": true, "format": "string", "value": "world_bank_mcp_server", "default": "world_bank_mcp_server", "type": "positional", - "value_hint": "world_bank_mcp_server" + "valueHint": "world_bank_mcp_server" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "world_bank_mcp_server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -15151,10 +15488,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "4e6fc5a4-eecb-46e4-a3ce-4310cbb8c3f4", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "4e6fc5a4-eecb-46e4-a3ce-4310cbb8c3f4", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "4e6fc5a4-eecb-46e4-a3ce-4310cbb8c3f4" } } }, @@ -15171,7 +15509,7 @@ "packages": [ { "version": "0.1.0", - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_key_here", "name": "API_KEY" @@ -15189,9 +15527,9 @@ "name": "ACCESS_TOKEN_SECRET" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@enescinar/twitter-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15199,10 +15537,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "ccb9aa0c-bbf5-46e6-a5f0-a5b4c11d519a", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "ccb9aa0c-bbf5-46e6-a5f0-a5b4c11d519a", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "ccb9aa0c-bbf5-46e6-a5f0-a5b4c11d519a" } } }, @@ -15219,17 +15558,17 @@ "packages": [ { "version": "0.1.0", - "package_arguments": [ + "packageArguments": [ { - "is_required": true, + "isRequired": true, "format": "string", "value": "x-mcp", "default": "x-mcp", "type": "positional", - "value_hint": "x-mcp" + "valueHint": "x-mcp" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "your_api_key", "name": "TWITTER_API_KEY" @@ -15247,9 +15586,9 @@ "name": "TWITTER_ACCESS_TOKEN_SECRET" } ], - "registry_type": "pypi", + "registryType": "pypi", "identifier": "x-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -15257,10 +15596,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a24e506b-b16b-412d-b806-fcf7e39b4549", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a24e506b-b16b-412d-b806-fcf7e39b4549", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a24e506b-b16b-412d-b806-fcf7e39b4549" } } }, @@ -15277,9 +15617,9 @@ "packages": [ { "version": "0.10.0", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcpxcodebuild", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -15287,10 +15627,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "bce1c06f-6325-418a-91e2-0ff2f6cf8ffc", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "bce1c06f-6325-418a-91e2-0ff2f6cf8ffc", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "bce1c06f-6325-418a-91e2-0ff2f6cf8ffc" } } }, @@ -15307,7 +15648,7 @@ "packages": [ { "version": "1.3.0", - "environment_variables": [ + "environmentVariables": [ { "description": "YOUR_CLIENT_ID", "name": "XERO_CLIENT_ID" @@ -15321,9 +15662,9 @@ "name": "XERO_REDIRECT_URI" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "xero-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15331,10 +15672,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "aeca0d6b-ed78-4634-a29a-6d08f71de2b6", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "aeca0d6b-ed78-4634-a29a-6d08f71de2b6", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "aeca0d6b-ed78-4634-a29a-6d08f71de2b6" } } }, @@ -15351,9 +15693,9 @@ "packages": [ { "version": "0.1.5", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "xiyan_mcp_server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -15361,10 +15703,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "a33de229-5e89-468d-aa2a-570b0f6e3dfa", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "a33de229-5e89-468d-aa2a-570b0f6e3dfa", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "a33de229-5e89-468d-aa2a-570b0f6e3dfa" } } }, @@ -15381,20 +15724,20 @@ "packages": [ { "version": "1.1.1", - "package_arguments": [ + "packageArguments": [ { "description": "/Users/alex/XMind", - "is_required": true, + "isRequired": true, "format": "string", "value": "/Users/alex/XMind", "default": "/Users/alex/XMind", "type": "positional", - "value_hint": "/Users/alex/XMind" + "valueHint": "/Users/alex/XMind" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@41px/mcp-xmind", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15402,10 +15745,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "cd63d589-6f0e-4d2d-8c9c-b6857f48cc62", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "cd63d589-6f0e-4d2d-8c9c-b6857f48cc62", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "cd63d589-6f0e-4d2d-8c9c-b6857f48cc62" } } }, @@ -15422,9 +15766,9 @@ "packages": [ { "version": "0.0.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "ynabmcpserver", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -15432,10 +15776,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c859bceb-143a-43dc-84e6-8ad8f707fcb0", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c859bceb-143a-43dc-84e6-8ad8f707fcb0", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c859bceb-143a-43dc-84e6-8ad8f707fcb0" } } }, @@ -15452,15 +15797,15 @@ "packages": [ { "version": "1.0.0", - "environment_variables": [ + "environmentVariables": [ { "description": "${input:apiKey}", "name": "YOUTUBE_API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "zubeid-youtube-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15468,10 +15813,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "0278fd92-a009-4a47-a6df-5f77db37e6ab", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "0278fd92-a009-4a47-a6df-5f77db37e6ab", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "0278fd92-a009-4a47-a6df-5f77db37e6ab" } } }, @@ -15488,7 +15834,7 @@ "packages": [ { "version": "1.0.1", - "environment_variables": [ + "environmentVariables": [ { "description": "Your Zoom Account ID", "name": "ZOOM_ACCOUNT_ID" @@ -15502,9 +15848,9 @@ "name": "ZOOM_CLIENT_SECRET" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@prathamesh0901/zoom-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15512,10 +15858,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "be45349a-793d-44d9-b2c6-6d4a30785a18", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "be45349a-793d-44d9-b2c6-6d4a30785a18", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "be45349a-793d-44d9-b2c6-6d4a30785a18" } } }, @@ -15532,9 +15879,9 @@ "packages": [ { "version": "0.2.1", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp_weather_server", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -15542,10 +15889,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "17829ab3-ae45-4fdd-95dc-4bb82a75752d", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "17829ab3-ae45-4fdd-95dc-4bb82a75752d", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "17829ab3-ae45-4fdd-95dc-4bb82a75752d" } } }, @@ -15562,9 +15910,9 @@ "packages": [ { "version": "1.0.1", - "registry_type": "npm", + "registryType": "npm", "identifier": "easy-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15572,10 +15920,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c636fa7e-796e-40a3-bdfc-52d7f4b82db4", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c636fa7e-796e-40a3-bdfc-52d7f4b82db4", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c636fa7e-796e-40a3-bdfc-52d7f4b82db4" } } }, @@ -15592,9 +15941,9 @@ "packages": [ { "version": "0.3.3", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "fastapi-mcp", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -15602,10 +15951,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "9297bbe7-81bc-4a7c-97ba-fcaaf8c7a626", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "9297bbe7-81bc-4a7c-97ba-fcaaf8c7a626", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "9297bbe7-81bc-4a7c-97ba-fcaaf8c7a626" } } }, @@ -15622,26 +15972,26 @@ "packages": [ { "version": "1.0.0", - "package_arguments": [ + "packageArguments": [ { "description": "/PATH/TO/YOUR_PROJECT/src/index.ts", - "is_required": true, + "isRequired": true, "format": "string", "value": "/PATH/TO/YOUR_PROJECT/src/index.ts", "default": "/PATH/TO/YOUR_PROJECT/src/index.ts", "type": "positional", - "value_hint": "/PATH/TO/YOUR_PROJECT/src/index.ts" + "valueHint": "/PATH/TO/YOUR_PROJECT/src/index.ts" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "value", "name": "YOUR_ENV_VAR" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "fastmcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15649,10 +15999,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "c978017d-b94a-4d0c-a46e-5395cb94a67e", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "c978017d-b94a-4d0c-a46e-5395cb94a67e", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "c978017d-b94a-4d0c-a46e-5395cb94a67e" } } }, @@ -15669,26 +16020,26 @@ "packages": [ { "version": "2.0.1", - "package_arguments": [ + "packageArguments": [ { "description": "start", - "is_required": true, + "isRequired": true, "format": "string", "value": "start", "default": "start", "type": "positional", - "value_hint": "start" + "valueHint": "start" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "development", "name": "NODE_ENV" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@mcpdotdirect/create-mcp-server", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15696,10 +16047,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "816a9400-2e2b-4697-8fbb-2a22fd81de74", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "816a9400-2e2b-4697-8fbb-2a22fd81de74", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "816a9400-2e2b-4697-8fbb-2a22fd81de74" } } }, @@ -15716,15 +16068,15 @@ "packages": [ { "version": "0.1.2", - "environment_variables": [ + "environmentVariables": [ { "description": "${input:apiKey}", "name": "API_KEY" } ], - "registry_type": "npm", + "registryType": "npm", "identifier": "@marimo-team/codemirror-mcp", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15732,10 +16084,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "bdcb0c25-b41c-4e61-ad25-89e5ddb35dcc", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "bdcb0c25-b41c-4e61-ad25-89e5ddb35dcc", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "bdcb0c25-b41c-4e61-ad25-89e5ddb35dcc" } } }, @@ -15752,9 +16105,9 @@ "packages": [ { "version": "1.10.0", - "registry_type": "npm", + "registryType": "npm", "identifier": "@wong2/mcp-cli", - "registry_base_url": "https://registry.npmjs.org", + "registryBaseUrl": "https://registry.npmjs.org", "transport": { "type": "stdio" } @@ -15762,10 +16115,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "29cf2977-4a42-44f0-8e62-f92ca8391412", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "29cf2977-4a42-44f0-8e62-f92ca8391412", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "29cf2977-4a42-44f0-8e62-f92ca8391412" } } }, @@ -15782,9 +16136,9 @@ "packages": [ { "version": "2.7.1", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcpm", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -15792,10 +16146,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "963aac9c-4999-4ce6-93c9-43d4b2de16bb", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "963aac9c-4999-4ce6-93c9-43d4b2de16bb", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "963aac9c-4999-4ce6-93c9-43d4b2de16bb" } } }, @@ -15812,9 +16167,9 @@ "packages": [ { "version": "0.1.9", - "registry_type": "pypi", + "registryType": "pypi", "identifier": "mcp-manager", - "registry_base_url": "https://pypi.org", + "registryBaseUrl": "https://pypi.org", "transport": { "type": "stdio" } @@ -15822,10 +16177,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "3288499d-b820-45c9-8abf-60c050c5c741", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "3288499d-b820-45c9-8abf-60c050c5c741", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "3288499d-b820-45c9-8abf-60c050c5c741" } } }, @@ -15842,9 +16198,9 @@ "packages": [ { "version": "0.2.1", - "registry_type": "oci", + "registryType": "oci", "identifier": "mcphub-desktop", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -15852,10 +16208,11 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "9f38c975-9a2a-484f-8173-562153f515e4", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "9f38c975-9a2a-484f-8173-562153f515e4", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "9f38c975-9a2a-484f-8173-562153f515e4" } } }, @@ -15872,9 +16229,9 @@ "packages": [ { "version": "0.1.0", - "registry_type": "oci", + "registryType": "oci", "identifier": "navfast", - "registry_base_url": "https://docker.io", + "registryBaseUrl": "https://docker.io", "transport": { "type": "stdio" } @@ -15882,11 +16239,12 @@ ], "_meta": { "io.modelcontextprotocol.registry/official": { - "id": "53bef572-b137-447a-bb2f-9fdd37926619", - "is_latest": true, - "published_at": "0001-01-01T00:00:00Z", - "updated_at": "0001-01-01T00:00:00Z" + "serverId": "53bef572-b137-447a-bb2f-9fdd37926619", + "isLatest": true, + "publishedAt": "0001-01-01T00:00:00Z", + "updatedAt": "0001-01-01T00:00:00Z", + "versionId": "53bef572-b137-447a-bb2f-9fdd37926619" } } } -] \ No newline at end of file +] diff --git a/docker-compose.yml b/docker-compose.yml index 7e321dd..bdbdab4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,6 +23,7 @@ services: - MCP_REGISTRY_OIDC_EXTRA_CLAIMS=${MCP_REGISTRY_OIDC_EXTRA_CLAIMS:-[{"hd":"modelcontextprotocol.io"}]} - MCP_REGISTRY_OIDC_EDIT_PERMISSIONS=${MCP_REGISTRY_OIDC_EDIT_PERMISSIONS:-*} - MCP_REGISTRY_OIDC_PUBLISH_PERMISSIONS=${MCP_REGISTRY_OIDC_PUBLISH_PERMISSIONS:-*} + - MCP_REGISTRY_ENABLE_REGISTRY_VALIDATION=${MCP_REGISTRY_ENABLE_REGISTRY_VALIDATION:-true} ports: - 8080:8080 restart: "unless-stopped" diff --git a/docs/explanations/versioning.md b/docs/explanations/versioning.md index 3bb1d54..be92f05 100644 --- a/docs/explanations/versioning.md +++ b/docs/explanations/versioning.md @@ -58,14 +58,14 @@ If server authors expect to have multiple registry versions for the same package ### For Semantic Versions The registry attempts to parse versions as semantic versions. If successful, it uses semantic version comparison rules to determine: - Version ordering in lists -- Which version is marked as `is_latest` +- Which version is marked as `isLatest` ### For Non-Semantic Versions If version parsing as semantic version fails: - The registry will always mark the version as latest (overriding any previous version) - Clients should fall back to using publish timestamp for ordering -**Important Note**: This behavior means that for servers with mixed semantic and non-semantic versions, the `is_latest` flag may not align with the total ordering. A non-semantic version published after semantic versions will be marked as latest, even if semantic versions are considered "higher" in the ordering. +**Important Note**: This behavior means that for servers with mixed semantic and non-semantic versions, the `isLatest` flag may not align with the total ordering. A non-semantic version published after semantic versions will be marked as latest, even if semantic versions are considered "higher" in the ordering. ## Implementation Details @@ -73,13 +73,13 @@ If version parsing as semantic version fails: 1. **Validation**: Versions are validated for uniqueness within a server name 2. **Parsing**: The registry attempts to parse each version as semantic version 3. **Comparison**: Uses semantic version rules when possible, falls back to timestamp -4. **Latest Flag**: The `is_latest` field is set based on the comparison results +4. **Latest Flag**: The `isLatest` field is set based on the comparison results ### Client Recommendations Registry clients SHOULD: 1. Attempt to interpret versions as semantic versions when possible 2. Use the following ordering rules: - - If one version is marked as is_latest: it is later + - If one version is marked as isLatest: it is later - If both versions are valid semver: use semver comparison - If neither are valid semver: use publish timestamp - If one is semver and one is not: semver version is considered higher @@ -145,7 +145,7 @@ Existing servers with non-semantic versions will continue to work without change "version": "1.2.3", "packages": [ { - "registry_type": "npm", + "registryType": "npm", "identifier": "@myorg/server", "version": "1.2.3" } @@ -160,7 +160,7 @@ Existing servers with non-semantic versions will continue to work without change "version": "1.2.3-1", "packages": [ { - "registry_type": "npm", + "registryType": "npm", "identifier": "@myorg/server", "version": "1.2.3" } @@ -196,12 +196,12 @@ Version strategy options: "version": "1.3.0", "packages": [ { - "registry_type": "npm", + "registryType": "npm", "identifier": "@myorg/server", "version": "1.3.0" }, { - "registry_type": "oci", + "registryType": "oci", "identifier": "myorg/server", "version": "1.2.5" } diff --git a/docs/guides/administration/admin-operations.md b/docs/guides/administration/admin-operations.md index 0d9f8c3..498ae89 100644 --- a/docs/guides/administration/admin-operations.md +++ b/docs/guides/administration/admin-operations.md @@ -16,31 +16,111 @@ This is a brief guide for admins and moderators managing content on the registry ./tools/admin/auth.sh ``` -## Edit a Server +## Edit a Specific Server Version -Step 1: Download Server +Use this when you need to modify details of a specific version (e.g., fix description, update status, modify packages). + +### Step 1: Download Specific Version ```bash -export SERVER_ID="" +export SERVER_ID="" # This is the server ID (consistent across versions) +export VERSION="" # e.g., "1.0.0" (optional, defaults to latest) + +# Get specific version +curl -s "https://registry.modelcontextprotocol.io/v0/servers/${SERVER_ID}?version=${VERSION}" > server.json + +# Or get latest version (omit version parameter) curl -s "https://registry.modelcontextprotocol.io/v0/servers/${SERVER_ID}" > server.json ``` -Step 2: Open `server.json` and make changes. You cannot change the server name. +### Step 2: Make Changes -Step 3: Push Changes +Open `server.json` and edit the specific version details. You cannot change the server name or version number. + +### Step 3: Update Version ```bash -curl -X PUT "https://registry.modelcontextprotocol.io/v0/servers/${SERVER_ID}" \ +# Update specific version +curl -X PUT "https://registry.modelcontextprotocol.io/v0/servers/${SERVER_ID}?version=${VERSION}" \ -H "Authorization: Bearer ${REGISTRY_TOKEN}" \ -H "Content-Type: application/json" \ - -d "{\"server\": $(cat server.json)}" + -d "$(cat server.json)" + ``` -## Takedown a Server +## Edit an Entire Server (All Versions) + +Use this when you need to apply changes across all versions of a server (e.g., mark entire server as deleted, apply content scrubbing). + +### Step 1: List All Versions + +```bash +export SERVER_ID="" # This is the server ID (consistent across versions) +curl -s "https://registry.modelcontextprotocol.io/v0/servers/${SERVER_ID}/versions" > all_versions.json +``` + +### Step 2: Extract Version IDs + +```bash +# Extract all version IDs from the server +jq -r '.servers[]._meta."io.modelcontextprotocol.registry/official".version_id' all_versions.json > version_ids.txt +``` + +### Step 3: Apply Changes to All Versions + +```bash +# For each version, download, modify, and update +while read VERSION_ID; do + echo "Processing version: $VERSION_ID" + curl -s "https://registry.modelcontextprotocol.io/v0/servers/${VERSION_ID}" > temp_version.json + + # Apply your changes here (e.g., set status to "deleted") + jq '.status = "deleted"' temp_version.json > modified_version.json + + curl -X PUT "https://registry.modelcontextprotocol.io/v0/servers/${VERSION_ID}" \ + -H "Authorization: Bearer ${REGISTRY_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"server\": $(cat modified_version.json)}" +done < version_ids.txt + +# Clean up temporary files +rm temp_version.json modified_version.json version_ids.txt all_versions.json +``` + +## Quick Operations + +### Get Latest Version of a Server ```bash export SERVER_ID="" +curl -s "https://registry.modelcontextprotocol.io/v0/servers/${SERVER_ID}" > latest_version.json +export VERSION_ID=$(jq -r '._meta."io.modelcontextprotocol.registry/official".version_id' latest_version.json) +echo "Latest version ID: $VERSION_ID" +``` + +### Takedown a Specific Version + +```bash +export VERSION_ID="" ./tools/admin/takedown.sh ``` -This soft deletes the server. If you need to delete the content of a server (usually only where legally necessary), use the edit workflow above to scrub it all. +### Takedown an Entire Server (All Versions) + +```bash +export SERVER_ID="" +# Get all version IDs and takedown each one +curl -s "https://registry.modelcontextprotocol.io/v0/servers/${SERVER_ID}/versions" | \ + jq -r '.servers[]._meta."io.modelcontextprotocol.registry/official".version_id' | \ + while read VERSION_ID; do + echo "Taking down version: $VERSION_ID" + ./tools/admin/takedown.sh "$VERSION_ID" + done +``` + +## Notes + +- **Version-specific changes**: Only affect that particular version +- **Server-wide changes**: Must be applied to each version individually +- **Content scrubbing**: Use the version-specific edit workflow to scrub sensitive content +- **Server name**: Cannot be changed in any version (it's the immutable identifier) diff --git a/docs/guides/consuming/use-rest-api.md b/docs/guides/consuming/use-rest-api.md index 04d5f40..fffc8ea 100644 --- a/docs/guides/consuming/use-rest-api.md +++ b/docs/guides/consuming/use-rest-api.md @@ -9,7 +9,9 @@ Integration patterns and best practices for building applications that consume M **Authentication**: Not required for read-only access - **`GET /v0/servers`** - List all servers with pagination -- **`GET /v0/servers/{id}`** - Get server details by UUID +- **`GET /v0/servers/{server_id}`** - Get latest version of server by server ID +- **`GET /v0/servers/{server_id}?version=X.X.X`** - Get specific version of server +- **`GET /v0/servers/{server_id}/versions`** - List all versions of a server See the [interactive API documentation](https://registry.modelcontextprotocol.io/docs) for complete request/response schemas. @@ -18,7 +20,7 @@ See the [interactive API documentation](https://registry.modelcontextprotocol.io ## Building a subregistry **Create enhanced registries** - ETL official registry data and add your own metadata like ratings, security scans, or compatibility info. -For now we recommend scraping the `GET /v0/servers` endpoint on some regular basis. In the future we might provide a filter for updated_at ([#291](https://github.com/modelcontextprotocol/registry/issues/291)) to get only recently changed servers. +For now we recommend scraping the `GET /v0/servers` endpoint on some regular basis. In the future we might provide a filter for updatedAt ([#291](https://github.com/modelcontextprotocol/registry/issues/291)) to get only recently changed servers. Servers are generally immutable, except for the `status` field which can be updated to `deleted` (among other states). For these packages, we recommend you also update the status field to `deleted` or remove the package from your registry quickly. This is because this status generally indicates it has violated our permissive [moderation guidelines](../administration/moderation-guidelines.md), suggesting it is illegal, malware or spam. @@ -30,14 +32,14 @@ You can also add custom metadata to servers using the `_meta` field. For example ```json { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "name": "io.github.yourname/weather-server", "description": "MCP server for weather data access", "status": "active", "version": "1.0.0", "packages": [ { - "registry_type": "npm", + "registryType": "npm", "identifier": "weather-mcp-server", "version": "1.0.0" } diff --git a/docs/guides/contributing/add-package-registry.md b/docs/guides/contributing/add-package-registry.md index e162624..a00f093 100644 --- a/docs/guides/contributing/add-package-registry.md +++ b/docs/guides/contributing/add-package-registry.md @@ -4,7 +4,7 @@ The MCP Registry project is a **metaregistry**, meaning that it hosts metadata f For local MCP servers, the MCP Registry has pointers in the `packages` node of the [`server.json`](../../reference/server-json/generic-server-json.md) schema that refer to packages in supported package managers. -The list of supported package managers for hosting MCP servers is defined by the `properties.packages[N].properties.registry_type` string enum in the [`server.json` schema](../../reference/server-json/server.schema.json). For example, this could be "npm" (for npmjs.com packages) or "pypi" (for PyPI packages). +The list of supported package managers for hosting MCP servers is defined by the `properties.packages[N].properties.registryType` string enum in the [`server.json` schema](../../reference/server-json/server.schema.json). For example, this could be "npm" (for npmjs.com packages) or "pypi" (for PyPI packages). For remote MCP servers, the package registry is not relevant. The MCP client consumes the server via a URL instead of by downloading and running a package. In other words, this document only applies to local MCP servers. @@ -34,13 +34,13 @@ These steps may evolve as additional validations or details are discovered and m - Example for NuGet: https://github.com/modelcontextprotocol/registry/issues/126 1. Open a PR with the following changes: - Update the [`server.json` schema](../../reference/server-json/server.schema.json) - - Add your package registry name to the `registry_type` example array. - - Add your package registry base url to the `registry_base_url` example array. - - Add the single-shot CLI command name to the `runtime_hint` example value array. + - Add your package registry name to the `registryType` example array. + - Add your package registry base url to the `registryBaseUrl` example array. + - Add the single-shot CLI command name to the `runtimeHint` example value array. - Update the [`openapi.yaml`](../../reference/api/openapi.yaml) - - Add your package registry name to the `registry_type` enum value array. - - Add your package registry base url to the `registry_base_url` enum value array. - - Add the single-shot CLI command name to the `runtime_hint` example value array. + - Add your package registry name to the `registryType` enum value array. + - Add your package registry base url to the `registryBaseUrl` enum value array. + - Add the single-shot CLI command name to the `runtimeHint` example value array. - Add a sample, minimal `server.json` to the [`server.json` examples](../../reference/server-json/generic-server-json.md). - Implement a registry validator: - Create a new validator file: `internal/validators/registries/yourregistry.go`, following the pattern of existing validators. Examples: diff --git a/docs/guides/publishing/publish-server.md b/docs/guides/publishing/publish-server.md index 328c452..a194f26 100644 --- a/docs/guides/publishing/publish-server.md +++ b/docs/guides/publishing/publish-server.md @@ -92,13 +92,13 @@ This creates a `server.json` with auto-detected values. You'll see something lik ```json { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "name": "io.github.yourname/your-server", "description": "A description of your MCP server", "version": "1.0.0", "packages": [ { - "registry_type": "npm", + "registryType": "npm", "identifier": "your-package-name", "version": "1.0.0" } @@ -151,7 +151,7 @@ Add an `mcpName` field to your `package.json`: "name": "io.github.username/server-name", "packages": [ { - "registry_type": "npm", + "registryType": "npm", "identifier": "your-npm-package", "version": "1.0.0" } @@ -183,7 +183,7 @@ Add it to your README.md file (which becomes the package description on PyPI). T "name": "io.github.username/server-name", "packages": [ { - "registry_type": "pypi", + "registryType": "pypi", "identifier": "your-pypi-package", "version": "1.0.0" } @@ -215,7 +215,7 @@ Add a README file to your NuGet package that includes the server name. This can "name": "io.github.username/server-name", "packages": [ { - "registry_type": "nuget", + "registryType": "nuget", "identifier": "Your.NuGet.Package", "version": "1.0.0" } @@ -251,8 +251,8 @@ LABEL io.modelcontextprotocol.server.name="io.github.username/server-name" "name": "io.github.username/server-name", "packages": [ { - "registry_type": "oci", - "registry_base_url": "https://docker.io", + "registryType": "oci", + "registryBaseUrl": "https://docker.io", "identifier": "yourusername/your-mcp-server", "version": "1.0.0" } @@ -266,8 +266,8 @@ LABEL io.modelcontextprotocol.server.name="io.github.username/server-name" "name": "io.github.username/server-name", "packages": [ { - "registry_type": "oci", - "registry_base_url": "https://ghcr.io", + "registryType": "oci", + "registryBaseUrl": "https://ghcr.io", "identifier": "yourusername/your-mcp-server", "version": "1.0.0" } @@ -302,9 +302,9 @@ openssl dgst -sha256 server.mcpb "name": "io.github.username/server-name", "packages": [ { - "registry_type": "mcpb", + "registryType": "mcpb", "identifier": "https://github.com/you/your-repo/releases/download/v1.0.0/server.mcpb", - "file_sha256": "fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce" + "fileSha256": "fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce" } ] } @@ -337,7 +337,7 @@ Add the `remotes` field to your `server.json` (can coexist with `packages`): ```json { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "name": "com.yourcompany/api-server", "description": "Cloud-hosted MCP server for API operations", "version": "2.0.0", @@ -388,8 +388,8 @@ Configure headers that clients should send when connecting: { "name": "X-API-Key", "description": "API key for authentication", - "is_required": true, - "is_secret": true + "isRequired": true, + "isSecret": true } ] } diff --git a/docs/reference/api/CHANGELOG.md b/docs/reference/api/CHANGELOG.md new file mode 100644 index 0000000..9c618b9 --- /dev/null +++ b/docs/reference/api/CHANGELOG.md @@ -0,0 +1,70 @@ +# Registry API Changelog + +Changes to the REST API endpoints and responses. + +## 2025-09-16 + +### ⚠️ BREAKING CHANGES + +#### Server ID Endpoints ([#396](https://github.com/modelcontextprotocol/registry/issues/396)) + +API endpoints updated for consistent server identification across versions. + +**Problem:** Each server version had a unique ID, preventing version history tracking and server renaming. + +**Solution:** Introduced consistent server identification across versions. + +**Changed endpoints:** +- `GET /v0/servers/{id}` → `GET /v0/servers/{server_id}` + +**New endpoints:** +- `GET /v0/servers/{server_id}/versions` - List all versions of a server +- `GET /v0/servers/{server_id}?version=1.0.0` - Get specific version + +**Changed response metadata:** +- `_meta.*.id` → `_meta.*.serverId` +- Added: `_meta.*.versionId` + +#### Migration Examples + +**Old Structure:** +```json +{ + "_meta": { + "io.modelcontextprotocol.registry/official": { + "id": "550e8400-e29b-41d4-a716-446655440000", + "published_at": "2024-01-01T00:00:00Z", + "is_latest": true + } + } +} +``` + +**New Structure:** +```json +{ + "_meta": { + "io.modelcontextprotocol.registry/official": { + "serverId": "550e8400-e29b-41d4-a716-446655440000", + "versionId": "773f9b2e-1a47-4c8d-b5e6-2f8d9c4a7b3e", + "published_at": "2024-01-01T00:00:00Z", + "is_latest": true + } + } +} +``` + +#### Migration Checklist for API Consumers + +- [ ] Update API endpoint URLs from `/v0/servers/{id}` to `/v0/servers/{server_id}` +- [ ] Update code reading registry metadata from `id` to `serverId`/`versionId` +- [ ] Add support for new `/v0/servers/{server_id}/versions` endpoint if needed +- [ ] Update JSON parsing to expect camelCase field names +- [ ] Test with new API responses + +### Changed +- OpenAPI spec version: `2025-07-09` → `2025-09-16` + +## 2025-07-09 + +Initial release of the Registry API. \ No newline at end of file diff --git a/docs/reference/api/generic-registry-api.md b/docs/reference/api/generic-registry-api.md index c664855..f128bb9 100644 --- a/docs/reference/api/generic-registry-api.md +++ b/docs/reference/api/generic-registry-api.md @@ -15,7 +15,9 @@ The official registry has some more endpoints and restrictions on top of this. S ### Core Endpoints - **`GET /v0/servers`** - List all servers with pagination -- **`GET /v0/servers/{id}`** - Get server details by UUID +- **`GET /v0/servers/{server_id}`** - Get latest version of server by server ID +- **`GET /v0/servers/{server_id}?version=X.X.X`** - Get specific version of server +- **`GET /v0/servers/{server_id}/versions`** - List all versions of a server - **`POST /v0/publish`** - Publish new server (optional, registry-specific authentication) ### Authentication diff --git a/docs/reference/api/official-registry-api.md b/docs/reference/api/official-registry-api.md index f8c7044..4bacc9f 100644 --- a/docs/reference/api/official-registry-api.md +++ b/docs/reference/api/official-registry-api.md @@ -58,4 +58,4 @@ Example: `GET /v0/servers?search=filesystem&updated_since=2025-08-01T00:00:00Z&v #### Admin endpoints - GET `/metrics` - Prometheus metrics endpoint - GET `/v0/health` - Basic health check endpoint -- PUT `/v0/servers/{id}` - Edit existing server +- PUT `/v0/servers/{server_id}?version=X.X.X` - Edit specific server version (version parameter required) diff --git a/docs/reference/api/openapi.yaml b/docs/reference/api/openapi.yaml index 2ac958b..d11cf40 100644 --- a/docs/reference/api/openapi.yaml +++ b/docs/reference/api/openapi.yaml @@ -1,9 +1,9 @@ openapi: 3.1.0 jsonSchemaDialect: "https://json-schema.org/draft/2020-12/schema" -$id: https://modelcontextprotocol.io/schemas/draft/2025-07-09/server-registry-openapi +$id: https://modelcontextprotocol.io/schemas/draft/2025-09-16/server-registry-openapi info: title: MCP Server Registry API - version: "2025-07-09" + version: "2025-09-16" summary: API for discovering and accessing MCP server metadata description: | Specification for a theoretical REST API that serves up metadata about MCP servers. @@ -36,21 +36,21 @@ paths: application/json: schema: $ref: '#/components/schemas/ServerList' - /v0/servers/{id}: + /v0/servers/{server_id}: get: summary: Get MCP server details - description: Returns detailed information about a specific MCP server + description: Returns detailed information about a specific MCP server. Returns latest version by default, or specific version if version query parameter is provided. parameters: - - name: id + - name: server_id in: path required: true - description: Unique ID of the server + description: Unique server ID (consistent across all versions) schema: type: string format: uuid - name: version in: query - description: Desired MCP server version + description: Specific version to retrieve (e.g., "1.0.0"). If not provided, returns latest version. schema: type: string responses: @@ -70,6 +70,35 @@ paths: error: type: string example: "Server not found" + /v0/servers/{server_id}/versions: + get: + summary: List all versions of an MCP server + description: Returns all available versions for a specific MCP server, ordered by publication date (newest first) + parameters: + - name: server_id + in: path + required: true + description: Unique server ID (consistent across all versions) + schema: + type: string + format: uuid + responses: + '200': + description: A list of all versions for the server + content: + application/json: + schema: + $ref: '#/components/schemas/ServerList' + '404': + description: Server not found + content: + application/json: + schema: + type: object + properties: + error: + type: string + example: "Server not found" /v0/publish: post: summary: Publish MCP server (Optional) @@ -99,8 +128,8 @@ paths: source: "github" version: "1.0.2" packages: - - registry_type: "npm" - registry_base_url: "https://registry.npmjs.org" + - registryType: "npm" + registryBaseUrl: "https://registry.npmjs.org" identifier: "@modelcontextprotocol/server-filesystem" version: "1.0.2" _meta: @@ -121,8 +150,8 @@ paths: source: "github" version: "1.0.0" packages: - - registry_type: "npm" - registry_base_url: "https://registry.npmjs.org" + - registryType: "npm" + registryBaseUrl: "https://registry.npmjs.org" identifier: "@example/mcp-demo-server" version: "1.0.0" _meta: @@ -233,7 +262,7 @@ components: type: string example: "1.0.2" description: "Version string for this server. SHOULD follow semantic versioning (e.g., '1.0.2', '2.1.0-alpha'). Equivalent of Implementation.version in MCP specification." - website_url: + websiteUrl: type: string format: uri description: "Optional URL to the server's homepage, documentation, or project website. This provides a central link for users to learn more about the server. Particularly useful when the server has custom installation instructions or setup requirements." @@ -269,7 +298,7 @@ components: Package: type: object properties: - registry_type: + registryType: type: string description: Registry type indicating how to download packages (e.g., 'npm', 'pypi', 'oci', 'nuget', 'mcpb') examples: @@ -278,7 +307,7 @@ components: - "oci" - "nuget" - "mcpb" - registry_base_url: + registryBaseUrl: type: string format: uri description: Base URL of the package registry @@ -299,25 +328,25 @@ components: type: string description: Package version example: "1.0.2" - file_sha256: + fileSha256: type: string description: SHA-256 hash of the package file for integrity verification. example: "fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce" - runtime_hint: + runtimeHint: 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. + description: A hint to help clients determine the appropriate runtime for the package. This field should be provided when `runtimeArguments` are present. examples: [npx, uvx, dnx] - runtime_arguments: + runtimeArguments: type: array - description: A list of arguments to be passed to the package's runtime command (such as docker or npx). The `runtime_hint` field should be provided when `runtime_arguments` are present. + description: A list of arguments to be passed to the package's runtime command (such as docker or npx). The `runtimeHint` field should be provided when `runtimeArguments` are present. items: $ref: '#/components/schemas/Argument' - package_arguments: + packageArguments: type: array description: A list of arguments to be passed to the package's binary. items: $ref: '#/components/schemas/Argument' - environment_variables: + environmentVariables: type: array description: A mapping of environment variables to be set when running the package. items: @@ -329,7 +358,7 @@ components: description: description: A description of the input, which clients can use to provide context to the user. type: string - is_required: + isRequired: type: boolean default: false format: @@ -346,7 +375,7 @@ components: The default value for the input. If this is not set, the user may be prompted to provide a value. If a value is set, it should not be configurable by end users. Identifiers wrapped in `{curly_braces}` will be replaced with the corresponding properties from the input `variables` map. If an identifier in braces is not found in `variables`, or if `variables` is not provided, the `{curly_braces}` substring should remain unchanged. - is_secret: + isSecret: type: boolean description: Indicates whether the input is a secret value (e.g., password, token). If true, clients should handle the value securely. default: false @@ -383,11 +412,11 @@ components: type: string enum: [positional] example: "positional" - value_hint: + valueHint: type: string description: An identifier-like hint for the value. This is not part of the command line, but can be used by client configuration and to provide hints to users. example: file_path - is_repeated: + isRepeated: type: boolean description: Whether the argument can be repeated multiple times in the command line. default: false @@ -395,7 +424,7 @@ components: - required: - value - required: - - value_hint + - valueHint NamedArgument: description: A command-line `--flag={value}`. @@ -414,7 +443,7 @@ components: type: string description: The flag name, including any leading dashes. example: "--port" - is_repeated: + isRepeated: type: boolean description: Whether the argument can be repeated multiple times. default: false @@ -468,7 +497,7 @@ components: type: string format: uri description: JSON Schema URI for this server.json format - example: "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json" + example: "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json" packages: type: array items: @@ -496,16 +525,22 @@ components: type: object description: Registry-specific metadata managed by the MCP registry system required: - - id + - serverId + - versionId - published_at - updated_at - is_latest properties: - id: + serverId: type: string format: uuid - description: Unique registry identifier for this server entry + description: Consistent ID across all versions of a server example: "550e8400-e29b-41d4-a716-446655440000" + versionId: + type: string + format: uuid + description: Unique ID for this specific version + example: "773f9b2e-1a47-4c8d-b5e6-2f8d9c4a7b3e" published_at: type: string format: date-time diff --git a/docs/reference/cli/commands.md b/docs/reference/cli/commands.md index 36f4e72..ff1d9c9 100644 --- a/docs/reference/cli/commands.md +++ b/docs/reference/cli/commands.md @@ -43,7 +43,7 @@ mcp-publisher init [options] "version": "1.0.0", "packages": [ { - "registry_type": "npm", + "registryType": "npm", "identifier": "detected-package-name", "version": "1.0.0" } diff --git a/docs/reference/server-json/CHANGELOG.md b/docs/reference/server-json/CHANGELOG.md new file mode 100644 index 0000000..912c349 --- /dev/null +++ b/docs/reference/server-json/CHANGELOG.md @@ -0,0 +1,126 @@ +# Server JSON Schema Changelog + +Changes to the server.json schema and format. + +## 2025-09-16 + +### ⚠️ BREAKING CHANGES + +#### Field Names: snake_case → camelCase ([#428](https://github.com/modelcontextprotocol/registry/issues/428)) + +All JSON field names standardized to camelCase. **All existing `server.json` files must be updated.** + +**Changed fields:** +- `registry_type` → `registryType` +- `registry_base_url` → `registryBaseUrl` +- `file_sha256` → `fileSha256` +- `runtime_hint` → `runtimeHint` +- `runtime_arguments` → `runtimeArguments` +- `package_arguments` → `packageArguments` +- `environment_variables` → `environmentVariables` +- `is_required` → `isRequired` +- `is_secret` → `isSecret` +- `value_hint` → `valueHint` +- `is_repeated` → `isRepeated` +- `website_url` → `websiteUrl` + +#### Migration Examples + +**Package Configuration:** +```json +// OLD - Will be rejected +{ + "packages": [{ + "registry_type": "npm", + "registry_base_url": "https://registry.npmjs.org", + "file_sha256": "abc123...", + "runtime_hint": "node", + "runtime_arguments": [...], + "package_arguments": [...], + "environment_variables": [...] + }] +} + +// NEW - Required format +{ + "packages": [{ + "registryType": "npm", + "registryBaseUrl": "https://registry.npmjs.org", + "fileSha256": "abc123...", + "runtimeHint": "node", + "runtimeArguments": [...], + "packageArguments": [...], + "environmentVariables": [...] + }] +} +``` + +**Arguments Configuration:** +```json +// OLD - Will be rejected +{ + "runtime_arguments": [ + { + "name": "port", + "is_required": true, + "is_repeated": false, + "value_hint": "8080" + } + ] +} + +// NEW - Required format +{ + "runtimeArguments": [ + { + "name": "port", + "isRequired": true, + "isRepeated": false, + "valueHint": "8080" + } + ] +} +``` + +**Environment Variables:** +```json +// OLD - Will be rejected +{ + "environment_variables": [ + { + "name": "API_KEY", + "is_required": true, + "is_secret": true + } + ] +} + +// NEW - Required format +{ + "environmentVariables": [ + { + "name": "API_KEY", + "isRequired": true, + "isSecret": true + } + ] +} +``` + +#### Migration Checklist for Publishers + +- [ ] Update your `server.json` files to use camelCase field names +- [ ] Test server publishing with new CLI version +- [ ] Update any automation scripts that reference old field names +- [ ] Update documentation referencing old field names + +#### Updated Schema Reference + +🔗 **Current schema**: https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json + +### Changed +- Schema version: `2025-07-09` → `2025-09-16` + +## 2025-07-09 + +Initial release of the server.json schema. \ No newline at end of file diff --git a/docs/reference/server-json/generic-server-json.md b/docs/reference/server-json/generic-server-json.md index 8a97cb7..b34e7b9 100644 --- a/docs/reference/server-json/generic-server-json.md +++ b/docs/reference/server-json/generic-server-json.md @@ -8,7 +8,7 @@ Also see: ## Browse the Complete Schema -**📋 View the full specification interactively**: Open [server.schema.json](./server.schema.json) in a schema viewer like [json-schema.app](https://json-schema.app/view/%23?url=https%3A%2F%2Fstatic.modelcontextprotocol.io%2Fschemas%2F2025-07-09%2Fserver.schema.json). +**📋 View the full specification interactively**: Open [server.schema.json](./server.schema.json) in a schema viewer like [json-schema.app](https://json-schema.app/view/%23?url=https%3A%2F%2Fstatic.modelcontextprotocol.io%2Fschemas%2F2025-09-16%2Fserver.schema.json). The schema contains all field definitions, validation rules, examples, and detailed descriptions. @@ -22,11 +22,11 @@ The official registry has some more restrictions on top of this. See the [offici ```json { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "name": "io.modelcontextprotocol.anonymous/brave-search", "description": "MCP server for Brave Search API integration", "status": "active", - "website_url": "https://anonymous.modelcontextprotocol.io/examples", + "websiteUrl": "https://anonymous.modelcontextprotocol.io/examples", "repository": { "url": "https://github.com/modelcontextprotocol/servers", "source": "github" @@ -34,19 +34,19 @@ The official registry has some more restrictions on top of this. See the [offici "version": "1.0.2", "packages": [ { - "registry_type": "npm", - "registry_base_url": "https://registry.npmjs.org", + "registryType": "npm", + "registryBaseUrl": "https://registry.npmjs.org", "identifier": "@modelcontextprotocol/server-brave-search", "version": "1.0.2", "transport": { "type": "stdio" }, - "environment_variables": [ + "environmentVariables": [ { "name": "BRAVE_API_KEY", "description": "Brave Search API Key", - "is_required": true, - "is_secret": true + "isRequired": true, + "isSecret": true } ] } @@ -69,7 +69,7 @@ For MCP servers located within a subdirectory of a larger repository (monorepo s ```json { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "name": "io.modelcontextprotocol/everything", "description": "MCP server that exercises all the features of the MCP protocol", "status": "active", @@ -81,8 +81,8 @@ For MCP servers located within a subdirectory of a larger repository (monorepo s "version": "0.6.2", "packages": [ { - "registry_type": "npm", - "registry_base_url": "https://registry.npmjs.org", + "registryType": "npm", + "registryBaseUrl": "https://registry.npmjs.org", "identifier": "@modelcontextprotocol/everything", "version": "0.6.2", "transport": { @@ -113,14 +113,14 @@ Suppose your MCP server application requires a `mcp start` CLI arguments to star "version": "0.4.0-beta", "packages": [ { - "registry_type": "nuget", - "registry_base_url": "https://api.nuget.org", + "registryType": "nuget", + "registryBaseUrl": "https://api.nuget.org", "identifier": "Knapcode.SampleMcpServer", "version": "0.4.0-beta", "transport": { "type": "stdio" }, - "package_arguments": [ + "packageArguments": [ { "type": "positional", "value": "mcp" @@ -145,13 +145,13 @@ Suppose your MCP server application requires a `mcp start` CLI arguments to star } ``` -This will essentially instruct the MCP client to execute `dnx Knapcode.SampleMcpServer@0.4.0-beta -- mcp start` instead of the default `dnx Knapcode.SampleMcpServer@0.4.0-beta` (when no `package_arguments` are provided). +This will essentially instruct the MCP client to execute `dnx Knapcode.SampleMcpServer@0.4.0-beta -- mcp start` instead of the default `dnx Knapcode.SampleMcpServer@0.4.0-beta` (when no `packageArguments` are provided). ### Filesystem Server with Multiple Packages ```json { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "name": "io.github.modelcontextprotocol/filesystem", "description": "Node.js server implementing Model Context Protocol (MCP) for filesystem operations.", "status": "active", @@ -163,24 +163,24 @@ This will essentially instruct the MCP client to execute `dnx Knapcode.SampleMcp "version": "1.0.2", "packages": [ { - "registry_type": "npm", - "registry_base_url": "https://registry.npmjs.org", + "registryType": "npm", + "registryBaseUrl": "https://registry.npmjs.org", "identifier": "@modelcontextprotocol/server-filesystem", "version": "1.0.2", "transport": { "type": "stdio" }, - "package_arguments": [ + "packageArguments": [ { "type": "positional", - "value_hint": "target_dir", + "valueHint": "target_dir", "description": "Path to access", "default": "/Users/username/Desktop", - "is_required": true, - "is_repeated": true + "isRequired": true, + "isRepeated": true } ], - "environment_variables": [ + "environmentVariables": [ { "name": "LOG_LEVEL", "description": "Logging level (debug, info, warn, error)", @@ -189,43 +189,43 @@ This will essentially instruct the MCP client to execute `dnx Knapcode.SampleMcp ] }, { - "registry_type": "oci", - "registry_base_url": "https://docker.io", + "registryType": "oci", + "registryBaseUrl": "https://docker.io", "identifier": "mcp/filesystem", "version": "1.0.2", "transport": { "type": "stdio" }, - "runtime_arguments": [ + "runtimeArguments": [ { "type": "named", "description": "Mount a volume into the container", "name": "--mount", "value": "type=bind,src={source_path},dst={target_path}", - "is_required": true, - "is_repeated": true, + "isRequired": true, + "isRepeated": true, "variables": { "source_path": { "description": "Source path on host", "format": "filepath", - "is_required": true + "isRequired": true }, "target_path": { "description": "Path to mount in the container. It should be rooted in `/project` directory.", - "is_required": true, + "isRequired": true, "default": "/project" } } } ], - "package_arguments": [ + "packageArguments": [ { "type": "positional", - "value_hint": "target_dir", + "valueHint": "target_dir", "value": "/project" } ], - "environment_variables": [ + "environmentVariables": [ { "name": "LOG_LEVEL", "description": "Logging level (debug, info, warn, error)", @@ -296,20 +296,20 @@ This will essentially instruct the MCP client to execute `dnx Knapcode.SampleMcp "version": "0.5.0", "packages": [ { - "registry_type": "pypi", - "registry_base_url": "https://pypi.org", + "registryType": "pypi", + "registryBaseUrl": "https://pypi.org", "identifier": "weather-mcp-server", "version": "0.5.0", - "runtime_hint": "uvx", + "runtimeHint": "uvx", "transport": { "type": "stdio" }, - "environment_variables": [ + "environmentVariables": [ { "name": "WEATHER_API_KEY", "description": "API key for weather service", - "is_required": true, - "is_secret": true + "isRequired": true, + "isSecret": true }, { "name": "WEATHER_UNITS", @@ -350,20 +350,20 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6. "version": "0.5.0", "packages": [ { - "registry_type": "nuget", - "registry_base_url": "https://api.nuget.org", + "registryType": "nuget", + "registryBaseUrl": "https://api.nuget.org", "identifier": "Knapcode.SampleMcpServer", "version": "0.5.0", - "runtime_hint": "dnx", + "runtimeHint": "dnx", "transport": { "type": "stdio" }, - "environment_variables": [ + "environmentVariables": [ { "name": "WEATHER_CHOICES", "description": "Comma separated list of weather descriptions to randomly select.", - "is_required": true, - "is_secret": false + "isRequired": true, + "isSecret": false } ] } @@ -398,14 +398,14 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6. "version": "3.1.0", "packages": [ { - "registry_type": "oci", - "registry_base_url": "https://docker.io", + "registryType": "oci", + "registryBaseUrl": "https://docker.io", "identifier": "example/database-manager-mcp", "version": "3.1.0", "transport": { "type": "stdio" }, - "runtime_arguments": [ + "runtimeArguments": [ { "type": "named", "name": "--network", @@ -417,7 +417,7 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6. "name": "-e", "value": "DB_TYPE={db_type}", "description": "Database type to connect to", - "is_repeated": true, + "isRepeated": true, "variables": { "db_type": { "description": "Type of database", @@ -427,18 +427,18 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6. "mongodb", "redis" ], - "is_required": true + "isRequired": true } } } ], - "package_arguments": [ + "packageArguments": [ { "type": "named", "name": "--host", "description": "Database host", "default": "localhost", - "is_required": true + "isRequired": true }, { "type": "named", @@ -448,22 +448,22 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6. }, { "type": "positional", - "value_hint": "database_name", + "valueHint": "database_name", "description": "Name of the database to connect to", - "is_required": true + "isRequired": true } ], - "environment_variables": [ + "environmentVariables": [ { "name": "DB_USERNAME", "description": "Database username", - "is_required": true + "isRequired": true }, { "name": "DB_PASSWORD", "description": "Database password", - "is_required": true, - "is_secret": true + "isRequired": true, + "isSecret": true }, { "name": "SSL_MODE", @@ -498,7 +498,7 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6. ```json { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "name": "io.modelcontextprotocol.anonymous/hybrid-mcp", "description": "MCP server available as both local package and remote service", "repository": { @@ -509,15 +509,15 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6. "version": "1.5.0", "packages": [ { - "registry_type": "npm", - "registry_base_url": "https://registry.npmjs.org", + "registryType": "npm", + "registryBaseUrl": "https://registry.npmjs.org", "identifier": "@example/hybrid-mcp-server", "version": "1.5.0", - "runtime_hint": "npx", + "runtimeHint": "npx", "transport": { "type": "stdio" }, - "package_arguments": [ + "packageArguments": [ { "type": "named", "name": "--mode", @@ -540,8 +540,8 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6. { "name": "X-API-Key", "description": "API key for authentication", - "is_required": true, - "is_secret": true + "isRequired": true, + "isSecret": true }, { "name": "X-Region", @@ -592,11 +592,11 @@ The `dnx` tool ships with the .NET 10 SDK, starting with Preview 6. "version": "1.0.2", "packages": [ { - "registry_type": "mcpb", - "registry_base_url": "https://github.com", + "registryType": "mcpb", + "registryBaseUrl": "https://github.com", "identifier": "https://github.com/modelcontextprotocol/text-editor-mcpb/releases/download/v1.0.2/text-editor.mcpb", "version": "1.0.2", - "file_sha256": "fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce", + "fileSha256": "fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce", "transport": { "type": "stdio" } @@ -622,25 +622,25 @@ This example shows an MCPB (MCP Bundle) package that: ### Embedded MCP inside a CLI tool -Some CLI tools bundle an MCP server, without a standalone MCP package or a public repository. In these cases, reuse the existing `packages` shape by pointing at the host CLI package and supplying the `package_arguments` and `runtime_hint` if needed to start the MCP server. +Some CLI tools bundle an MCP server, without a standalone MCP package or a public repository. In these cases, reuse the existing `packages` shape by pointing at the host CLI package and supplying the `packageArguments` and `runtimeHint` if needed to start the MCP server. ```json { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "name": "io.snyk/cli-mcp", "description": "MCP server provided by the Snyk CLI", "status": "active", "version": "1.1298.0", "packages": [ { - "registry_type": "npm", - "registry_base_url": "https://registry.npmjs.org", + "registryType": "npm", + "registryBaseUrl": "https://registry.npmjs.org", "identifier": "snyk", "version": "1.1298.0", "transport": { "type": "stdio" }, - "package_arguments": [ + "packageArguments": [ { "type": "positional", "value": "mcp" }, { "type": "named", @@ -657,15 +657,15 @@ Some CLI tools bundle an MCP server, without a standalone MCP package or a publi ### Server with Custom Installation Path -For MCP servers that follow a custom installation path or are embedded in applications without standalone packages, use the `website_url` field to direct users to setup documentation: +For MCP servers that follow a custom installation path or are embedded in applications without standalone packages, use the `websiteUrl` field to direct users to setup documentation: ```json { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "name": "io.modelcontextprotocol.anonymous/embedded-mcp", "description": "MCP server embedded in a Desktop app", "status": "active", - "website_url": "https://anonymous.modelcontextprotocol.io/embedded-mcp-guide", + "websiteUrl": "https://anonymous.modelcontextprotocol.io/embedded-mcp-guide", "version": "0.1.0" } ``` @@ -685,19 +685,19 @@ For MCP servers that follow a custom installation path or are embedded in applic "version": "0.9.5", "packages": [ { - "registry_type": "npm", - "registry_base_url": "https://registry.npmjs.org", + "registryType": "npm", + "registryBaseUrl": "https://registry.npmjs.org", "identifier": "@legacy/old-weather-server", "version": "0.9.5", "transport": { "type": "stdio" }, - "environment_variables": [ + "environmentVariables": [ { "name": "WEATHER_API_KEY", "description": "Weather API key", - "is_required": true, - "is_secret": true + "isRequired": true, + "isSecret": true } ] } diff --git a/docs/reference/server-json/server.schema.json b/docs/reference/server-json/server.schema.json index e4e0a92..8766b2a 100644 --- a/docs/reference/server-json/server.schema.json +++ b/docs/reference/server-json/server.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "$id": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "title": "MCP Server Detail", "$ref": "#/definitions/ServerDetail", "definitions": { @@ -74,7 +74,7 @@ "example": "1.0.2", "description": "Version string for this server. SHOULD follow semantic versioning (e.g., '1.0.2', '2.1.0-alpha'). Equivalent of Implementation.version in MCP specification. Non-semantic versions are allowed but may not sort predictably. Version ranges are rejected (e.g., '^1.2.3', '~1.2.3', '>=1.2.3', '1.x', '1.*')." }, - "website_url": { + "websiteUrl": { "type": "string", "format": "uri", "description": "Optional URL to the server's homepage, documentation, or project website. This provides a central link for users to learn more about the server. Particularly useful when the server has custom installation instructions or setup requirements.", @@ -86,18 +86,18 @@ "type": "object", "additionalProperties": false, "required": [ - "registry_type", + "registryType", "identifier", "version", "transport" ], "properties": { - "registry_type": { + "registryType": { "type": "string", "description": "Registry type indicating how to download packages (e.g., 'npm', 'pypi', 'oci', 'nuget', 'mcpb')", "examples": ["npm", "pypi", "oci", "nuget", "mcpb"] }, - "registry_base_url": { + "registryBaseUrl": { "type": "string", "format": "uri", "description": "Base URL of the package registry", @@ -117,15 +117,15 @@ "example": "1.0.2", "minLength": 1 }, - "file_sha256": { + "fileSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$", "description": "SHA-256 hash of the package file for integrity verification. Required for MCPB packages and optional for other package types. Authors are responsible for generating correct SHA-256 hashes when creating server.json. If present, MCP clients must validate the downloaded file matches the hash before running packages to ensure file integrity.", "example": "fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce" }, - "runtime_hint": { + "runtimeHint": { "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.", + "description": "A hint to help clients determine the appropriate runtime for the package. This field should be provided when `runtimeArguments` are present.", "examples": [ "npx", "uvx", @@ -147,21 +147,21 @@ ], "description": "Transport protocol configuration for the package" }, - "runtime_arguments": { + "runtimeArguments": { "type": "array", - "description": "A list of arguments to be passed to the package's runtime command (such as docker or npx). The `runtime_hint` field should be provided when `runtime_arguments` are present.", + "description": "A list of arguments to be passed to the package's runtime command (such as docker or npx). The `runtimeHint` field should be provided when `runtimeArguments` are present.", "items": { "$ref": "#/definitions/Argument" } }, - "package_arguments": { + "packageArguments": { "type": "array", "description": "A list of arguments to be passed to the package's binary.", "items": { "$ref": "#/definitions/Argument" } }, - "environment_variables": { + "environmentVariables": { "type": "array", "description": "A mapping of environment variables to be set when running the package.", "items": { @@ -177,7 +177,7 @@ "description": "A description of the input, which clients can use to provide context to the user.", "type": "string" }, - "is_required": { + "isRequired": { "type": "boolean", "default": false }, @@ -196,7 +196,7 @@ "type": "string", "description": "The default value for the input. If this is not set, the user may be prompted to provide a value. If a value is set, it should not be configurable by end users.\n\nIdentifiers wrapped in `{curly_braces}` will be replaced with the corresponding properties from the input `variables` map. If an identifier in braces is not found in `variables`, or if `variables` is not provided, the `{curly_braces}` substring should remain unchanged.\n" }, - "is_secret": { + "isSecret": { "type": "boolean", "description": "Indicates whether the input is a secret value (e.g., password, token). If true, clients should handle the value securely.", "default": false @@ -253,12 +253,12 @@ ], "example": "positional" }, - "value_hint": { + "valueHint": { "type": "string", "description": "An identifier-like hint for the value. This is not part of the command line, but can be used by client configuration and to provide hints to users.", "example": "file_path" }, - "is_repeated": { + "isRepeated": { "type": "boolean", "description": "Whether the argument can be repeated multiple times in the command line.", "default": false @@ -267,7 +267,7 @@ "anyOf": [ { "required": [ - "value_hint" + "valueHint" ] }, { @@ -304,7 +304,7 @@ "description": "The flag name, including any leading dashes.", "example": "--port" }, - "is_repeated": { + "isRepeated": { "type": "boolean", "description": "Whether the argument can be repeated multiple times.", "default": false @@ -377,7 +377,7 @@ }, "url": { "type": "string", - "description": "URL template for the streamable-http transport. Variables in {curly_braces} reference argument value_hints, argument names, or environment variable names. After variable substitution, this should produce a valid URI.", + "description": "URL template for the streamable-http transport. Variables in {curly_braces} reference argument valueHints, argument names, or environment variable names. After variable substitution, this should produce a valid URI.", "example": "https://api.example.com/mcp" }, "headers": { @@ -432,7 +432,7 @@ "type": "string", "format": "uri", "description": "JSON Schema URI for this server.json format", - "example": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json" + "example": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json" }, "packages": { "type": "array", @@ -475,4 +475,4 @@ ] } } -} \ No newline at end of file +} diff --git a/internal/api/handlers/v0/edit.go b/internal/api/handlers/v0/edit.go index 10256b4..4a3c58c 100644 --- a/internal/api/handlers/v0/edit.go +++ b/internal/api/handlers/v0/edit.go @@ -18,7 +18,8 @@ import ( // EditServerInput represents the input for editing a server type EditServerInput struct { Authorization string `header:"Authorization" doc:"Registry JWT token with edit permissions" required:"true"` - ID string `path:"id" doc:"Server ID (UUID)" format:"uuid"` + ServerID string `path:"server_id" doc:"Server ID (UUID)" format:"uuid"` + Version string `query:"version" doc:"Version to edit (e.g., '1.0.0')" required:"true" example:"1.0.0"` Body apiv0.ServerJSON `body:""` } @@ -30,9 +31,9 @@ func RegisterEditEndpoints(api huma.API, registry service.RegistryService, cfg * huma.Register(api, huma.Operation{ OperationID: "edit-server", Method: http.MethodPut, - Path: "/v0/servers/{id}", + Path: "/v0/servers/{server_id}", Summary: "Edit MCP server", - Description: "Update an existing MCP server (admin only)", + Description: "Update an existing MCP server (admin only). Requires version query parameter to specify which version to edit.", Tags: []string{"admin"}, Security: []map[string][]string{ {"bearer": {}}, @@ -53,7 +54,8 @@ func RegisterEditEndpoints(api huma.API, registry service.RegistryService, cfg * } // Get current server to check permissions against existing name - currentServer, err := registry.GetByID(input.ID) + currentServer, err := registry.GetByServerIDAndVersion(input.ServerID, input.Version) + if err != nil { if errors.Is(err, database.ErrNotFound) { return nil, huma.Error404NotFound("Server not found") @@ -76,8 +78,13 @@ func RegisterEditEndpoints(api huma.API, registry service.RegistryService, cfg * return nil, huma.Error400BadRequest("Cannot change status of deleted server. Deleted servers cannot be undeleted.") } - // Edit the server - updatedServer, err := registry.EditServer(input.ID, input.Body) + // Edit the server using the version_id from the current server + versionID := currentServer.GetVersionID() + if versionID == "" { + return nil, huma.Error500InternalServerError("Server version ID not found in metadata", nil) + } + + updatedServer, err := registry.EditServer(versionID, input.Body) if err != nil { if errors.Is(err, database.ErrNotFound) { return nil, huma.Error404NotFound("Server not found") diff --git a/internal/api/handlers/v0/edit_test.go b/internal/api/handlers/v0/edit_test.go index ef8562f..fc7e028 100644 --- a/internal/api/handlers/v0/edit_test.go +++ b/internal/api/handlers/v0/edit_test.go @@ -42,7 +42,7 @@ func TestEditServerEndpoint(t *testing.T) { assert.NotNil(t, published.Meta) assert.NotNil(t, published.Meta.Official) - testServerID := published.Meta.Official.ID + testServerID := published.Meta.Official.ServerID // Publish a second server for permission testing otherServer := apiv0.ServerJSON{ @@ -62,7 +62,7 @@ func TestEditServerEndpoint(t *testing.T) { assert.NotNil(t, otherPublished.Meta) assert.NotNil(t, otherPublished.Meta.Official) - otherServerID := otherPublished.Meta.Official.ID + otherServerID := otherPublished.Meta.Official.ServerID // Publish a deleted server for undelete testing deletedServer := apiv0.ServerJSON{ @@ -82,13 +82,14 @@ func TestEditServerEndpoint(t *testing.T) { assert.NotNil(t, deletedPublished.Meta) assert.NotNil(t, deletedPublished.Meta.Official) - deletedServerID := deletedPublished.Meta.Official.ID + deletedServerID := deletedPublished.Meta.Official.ServerID testCases := []struct { name string authHeader string requestBody interface{} serverID string + version string expectedStatus int expectedError string }{ @@ -114,9 +115,10 @@ func TestEditServerEndpoint(t *testing.T) { Source: "github", ID: "domdomegg/test-server", }, - Version: "1.0.1", + Version: "1.0.0", }, serverID: testServerID, + version: "1.0.0", expectedStatus: http.StatusOK, }, { @@ -124,6 +126,7 @@ func TestEditServerEndpoint(t *testing.T) { authHeader: "", requestBody: apiv0.ServerJSON{}, serverID: testServerID, + version: "1.0.0", expectedStatus: 422, expectedError: "required header parameter is missing", }, @@ -131,11 +134,12 @@ func TestEditServerEndpoint(t *testing.T) { name: "invalid authorization header format", authHeader: "InvalidFormat token123", requestBody: apiv0.ServerJSON{ - Name: "io.github.domdomegg/test-server", - Description: "Test server", - Version: "1.0.0", + Name: "io.github.domdomegg/test-server", + Description: "Test server", + Version: "1.0.0", }, serverID: testServerID, + version: "1.0.0", expectedStatus: http.StatusUnauthorized, expectedError: "Unauthorized", }, @@ -143,11 +147,12 @@ func TestEditServerEndpoint(t *testing.T) { name: "invalid token", authHeader: "Bearer invalid-token", requestBody: apiv0.ServerJSON{ - Name: "io.github.domdomegg/test-server", - Description: "Test server", - Version: "1.0.0", + Name: "io.github.domdomegg/test-server", + Description: "Test server", + Version: "1.0.0", }, serverID: testServerID, + version: "1.0.0", expectedStatus: http.StatusUnauthorized, expectedError: "Unauthorized", }, @@ -165,11 +170,12 @@ func TestEditServerEndpoint(t *testing.T) { return "Bearer " + token }(), requestBody: apiv0.ServerJSON{ - Name: "io.github.domdomegg/test-server", - Description: "Updated test server", - Version: "1.0.0", + Name: "io.github.domdomegg/test-server", + Description: "Updated test server", + Version: "1.0.0", }, serverID: testServerID, + version: "1.0.0", expectedStatus: http.StatusForbidden, expectedError: "Forbidden", }, @@ -187,11 +193,12 @@ func TestEditServerEndpoint(t *testing.T) { return "Bearer " + token }(), requestBody: apiv0.ServerJSON{ - Name: "io.github.other/test-server", - Description: "Updated test server", - Version: "1.0.0", + Name: "io.github.other/test-server", + Description: "Updated test server", + Version: "1.0.0", }, serverID: otherServerID, + version: "1.0.0", expectedStatus: http.StatusForbidden, expectedError: "Forbidden", }, @@ -209,11 +216,12 @@ func TestEditServerEndpoint(t *testing.T) { return "Bearer " + token }(), requestBody: apiv0.ServerJSON{ - Name: "io.github.domdomegg/nonexistent-server", - Description: "Updated test server", - Version: "1.0.0", + Name: "io.github.domdomegg/nonexistent-server", + Description: "Updated test server", + Version: "1.0.0", }, serverID: "550e8400-e29b-41d4-a716-446655440999", // Non-existent ID + version: "1.0.0", expectedStatus: http.StatusNotFound, expectedError: "Not Found", }, @@ -231,11 +239,12 @@ func TestEditServerEndpoint(t *testing.T) { return "Bearer " + token }(), requestBody: apiv0.ServerJSON{ - Name: "invalid-name-format", // Missing namespace/name format - Description: "Test server", - Version: "1.0.0", + Name: "invalid-name-format", // Missing namespace/name format + Description: "Test server", + Version: "1.0.0", }, serverID: testServerID, + version: "1.0.0", expectedStatus: http.StatusBadRequest, expectedError: "Bad Request", }, @@ -264,6 +273,7 @@ func TestEditServerEndpoint(t *testing.T) { Version: "1.0.1", }, serverID: deletedServerID, + version: "1.0.0", expectedStatus: http.StatusBadRequest, expectedError: "Cannot change status of deleted server", }, @@ -293,7 +303,11 @@ func TestEditServerEndpoint(t *testing.T) { } // Create request - req := httptest.NewRequest(http.MethodPut, "/v0/servers/"+tc.serverID, bytes.NewReader(requestBody)) + url := "/v0/servers/" + tc.serverID + if tc.version != "" { + url += "?version=" + tc.version + } + req := httptest.NewRequest(http.MethodPut, url, bytes.NewReader(requestBody)) req.Header.Set("Content-Type", "application/json") if tc.authHeader != "" { req.Header.Set("Authorization", tc.authHeader) diff --git a/internal/api/handlers/v0/servers.go b/internal/api/handlers/v0/servers.go index da05af7..ed4bc62 100644 --- a/internal/api/handlers/v0/servers.go +++ b/internal/api/handlers/v0/servers.go @@ -2,6 +2,7 @@ package v0 import ( "context" + "errors" "net/http" "time" @@ -23,7 +24,13 @@ type ListServersInput struct { // ServerDetailInput represents the input for getting server details type ServerDetailInput struct { - ID string `path:"id" doc:"Server ID (UUID)" format:"uuid"` + ServerID string `path:"server_id" doc:"Server ID (UUID)" format:"uuid"` + Version string `query:"version" doc:"Specific version to retrieve (e.g., '1.0.0'). If not specified, returns latest version." required:"false" example:"1.0.0"` +} + +// ServerVersionsInput represents the input for listing all versions of a server +type ServerVersionsInput struct { + ServerID string `path:"server_id" doc:"Server ID (UUID)" format:"uuid"` } // RegisterServersEndpoints registers all server-related endpoints @@ -96,15 +103,25 @@ func RegisterServersEndpoints(api huma.API, registry service.RegistryService) { huma.Register(api, huma.Operation{ OperationID: "get-server", Method: http.MethodGet, - Path: "/v0/servers/{id}", + Path: "/v0/servers/{server_id}", Summary: "Get MCP server details", - Description: "Get detailed information about a specific MCP server", + Description: "Get detailed information about a specific MCP server. Returns the latest version by default, or a specific version if the 'version' query parameter is provided.", Tags: []string{"servers"}, }, func(_ context.Context, input *ServerDetailInput) (*Response[apiv0.ServerJSON], error) { // Get the server details from the registry service - serverDetail, err := registry.GetByID(input.ID) + var serverDetail *apiv0.ServerJSON + var err error + + if input.Version != "" { + // Get specific version by server_id and version + serverDetail, err = registry.GetByServerIDAndVersion(input.ServerID, input.Version) + } else { + // Get latest version by server_id + serverDetail, err = registry.GetByServerID(input.ServerID) + } + if err != nil { - if err.Error() == "record not found" { + if err.Error() == "record not found" || errors.Is(err, database.ErrNotFound) { return nil, huma.Error404NotFound("Server not found") } return nil, huma.Error500InternalServerError("Failed to get server details", err) @@ -114,4 +131,32 @@ func RegisterServersEndpoints(api huma.API, registry service.RegistryService) { Body: *serverDetail, }, nil }) + + // Get server versions endpoint + huma.Register(api, huma.Operation{ + OperationID: "get-server-versions", + Method: http.MethodGet, + Path: "/v0/servers/{server_id}/versions", + Summary: "Get all versions of an MCP server", + Description: "Get all available versions for a specific MCP server", + Tags: []string{"servers"}, + }, func(_ context.Context, input *ServerVersionsInput) (*Response[apiv0.ServerListResponse], error) { + // Get all versions for this server + servers, err := registry.GetAllVersionsByServerID(input.ServerID) + if err != nil { + if err.Error() == "record not found" { + return nil, huma.Error404NotFound("Server not found") + } + return nil, huma.Error500InternalServerError("Failed to get server versions", err) + } + + return &Response[apiv0.ServerListResponse]{ + Body: apiv0.ServerListResponse{ + Servers: servers, + Metadata: apiv0.Metadata{ + Count: len(servers), + }, + }, + }, nil + }) } diff --git a/internal/api/handlers/v0/servers_test.go b/internal/api/handlers/v0/servers_test.go index 5b96e25..e036438 100644 --- a/internal/api/handlers/v0/servers_test.go +++ b/internal/api/handlers/v0/servers_test.go @@ -354,7 +354,7 @@ func TestServersListEndpoint(t *testing.T) { assert.NotEmpty(t, server.Description) assert.NotNil(t, server.Meta) assert.NotNil(t, server.Meta.Official) - assert.NotEmpty(t, server.Meta.Official.ID) + assert.NotEmpty(t, server.Meta.Official.VersionID) } // Check metadata if expected @@ -380,25 +380,53 @@ func TestServersDetailEndpoint(t *testing.T) { // Create mock registry service registryService := service.NewRegistryService(database.NewMemoryDB(), config.NewConfig()) - testServer, err := registryService.Publish(apiv0.ServerJSON{ + // Publish multiple versions of the same server + testServer1, err := registryService.Publish(apiv0.ServerJSON{ Name: "com.example/test-server", Description: "A test server", Version: "1.0.0", }) assert.NoError(t, err) + _, err = registryService.Publish(apiv0.ServerJSON{ + Name: "com.example/test-server", + Description: "A test server updated", + Version: "2.0.0", + }) + assert.NoError(t, err) + testCases := []struct { name string serverID string + version string expectedStatus int expectedServer *apiv0.ServerJSON expectedError string }{ { - name: "successful get server detail", - serverID: testServer.Meta.Official.ID, + name: "successful get server detail (latest)", + serverID: testServer1.Meta.Official.ServerID, expectedStatus: http.StatusOK, }, + { + name: "successful get server detail with specific version", + serverID: testServer1.Meta.Official.ServerID, + version: "1.0.0", + expectedStatus: http.StatusOK, + }, + { + name: "successful get server detail with latest version", + serverID: testServer1.Meta.Official.ServerID, + version: "2.0.0", + expectedStatus: http.StatusOK, + }, + { + name: "version not found for server", + serverID: testServer1.Meta.Official.ServerID, + version: "3.0.0", + expectedStatus: http.StatusNotFound, + expectedError: "Server not found", + }, { name: "invalid server ID format", serverID: "invalid-uuid", @@ -424,6 +452,9 @@ func TestServersDetailEndpoint(t *testing.T) { // Create request url := "/v0/servers/" + tc.serverID + if tc.version != "" { + url += "?version=" + tc.version + } req := httptest.NewRequest(http.MethodGet, url, nil) w := httptest.NewRecorder() @@ -455,6 +486,115 @@ func TestServersDetailEndpoint(t *testing.T) { } } +func TestServersVersionsEndpoint(t *testing.T) { + // Create mock registry service + registryService := service.NewRegistryService(database.NewMemoryDB(), config.NewConfig()) + + // Publish multiple versions of the same server + testServer1, err := registryService.Publish(apiv0.ServerJSON{ + Name: "com.example/versioned-server", + Description: "A versioned test server", + Version: "1.0.0", + }) + assert.NoError(t, err) + + _, err = registryService.Publish(apiv0.ServerJSON{ + Name: "com.example/versioned-server", + Description: "A versioned test server updated", + Version: "2.0.0", + }) + assert.NoError(t, err) + + _, err = registryService.Publish(apiv0.ServerJSON{ + Name: "com.example/versioned-server", + Description: "A versioned test server latest", + Version: "2.1.0", + }) + assert.NoError(t, err) + + testCases := []struct { + name string + serverID string + expectedStatus int + expectedCount int + expectedError string + }{ + { + name: "successful get all versions", + serverID: testServer1.Meta.Official.ServerID, + expectedStatus: http.StatusOK, + expectedCount: 3, + }, + { + name: "invalid server ID format", + serverID: "invalid-uuid", + expectedStatus: http.StatusUnprocessableEntity, + expectedError: "validation failed", + }, + { + name: "server not found", + serverID: uuid.New().String(), + expectedStatus: http.StatusNotFound, + expectedError: "Server not found", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + // Create a new test API + mux := http.NewServeMux() + api := humago.New(mux, huma.DefaultConfig("Test API", "1.0.0")) + + // Register the servers endpoints + v0.RegisterServersEndpoints(api, registryService) + + // Create request + url := "/v0/servers/" + tc.serverID + "/versions" + req := httptest.NewRequest(http.MethodGet, url, nil) + w := httptest.NewRecorder() + + // Serve the request + mux.ServeHTTP(w, req) + + // Check status code + assert.Equal(t, tc.expectedStatus, w.Code) + + if tc.expectedStatus == http.StatusOK { + // Check content type + assert.Equal(t, "application/json", w.Header().Get("Content-Type")) + + // Parse response body + var versionsResp apiv0.ServerListResponse + err := json.NewDecoder(w.Body).Decode(&versionsResp) + assert.NoError(t, err) + + // Check the response data + assert.Len(t, versionsResp.Servers, tc.expectedCount) + assert.Equal(t, tc.expectedCount, versionsResp.Metadata.Count) + + // Verify all returned servers have the same server ID but different versions + for _, server := range versionsResp.Servers { + assert.Equal(t, tc.serverID, server.Meta.Official.ServerID) + assert.NotEmpty(t, server.Version) + assert.Equal(t, "com.example/versioned-server", server.Name) + } + + // Verify versions are included (should have 1.0.0, 2.0.0, 2.1.0) + versions := make([]string, 0, len(versionsResp.Servers)) + for _, server := range versionsResp.Servers { + versions = append(versions, server.Version) + } + assert.Contains(t, versions, "1.0.0") + assert.Contains(t, versions, "2.0.0") + assert.Contains(t, versions, "2.1.0") + } else if tc.expectedError != "" { + // Check error message for non-200 responses + assert.Contains(t, w.Body.String(), tc.expectedError) + } + }) + } +} + // TestServersEndpointsIntegration tests the servers endpoints with actual HTTP requests func TestServersEndpointsIntegration(t *testing.T) { // Create mock registry service @@ -476,7 +616,7 @@ func TestServersEndpointsIntegration(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, published) - serverID := published.Meta.Official.ID + serverID := published.Meta.Official.ServerID servers := []apiv0.ServerJSON{*published} serverDetail := published diff --git a/internal/api/handlers/v0/telemetry_test.go b/internal/api/handlers/v0/telemetry_test.go index 8b00127..6da1282 100644 --- a/internal/api/handlers/v0/telemetry_test.go +++ b/internal/api/handlers/v0/telemetry_test.go @@ -51,7 +51,7 @@ func TestPrometheusHandler(t *testing.T) { mux.Handle("/metrics", metrics.PrometheusHandler()) // Create request - url := "/v0/servers/" + server.Meta.Official.ID + url := "/v0/servers/" + server.Meta.Official.ServerID req := httptest.NewRequest(http.MethodGet, url, nil) w := httptest.NewRecorder() @@ -76,5 +76,5 @@ func TestPrometheusHandler(t *testing.T) { // Check if the response body contains expected metrics assert.Contains(t, body, "mcp_registry_http_request_duration_bucket") assert.Contains(t, body, "mcp_registry_http_requests_total") - assert.Contains(t, body, "path=\"/v0/servers/{id}\"") + assert.Contains(t, body, "path=\"/v0/servers/{server_id}\"") } diff --git a/internal/database/database.go b/internal/database/database.go index 0f9dc88..b609e9b 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -32,8 +32,14 @@ type ServerFilter struct { type Database interface { // Retrieve server entries with optional filtering List(ctx context.Context, filter *ServerFilter, cursor string, limit int) ([]*apiv0.ServerJSON, string, error) - // Retrieve a single server by its ID - GetByID(ctx context.Context, id string) (*apiv0.ServerJSON, error) + // Retrieve a single server by its version ID + GetByVersionID(ctx context.Context, versionID string) (*apiv0.ServerJSON, error) + // Retrieve latest version of a server by server ID + GetByServerID(ctx context.Context, serverID string) (*apiv0.ServerJSON, error) + // Retrieve specific version of a server by server ID and version + GetByServerIDAndVersion(ctx context.Context, serverID string, version string) (*apiv0.ServerJSON, error) + // Retrieve all versions of a server by server ID + GetAllVersionsByServerID(ctx context.Context, serverID string) ([]*apiv0.ServerJSON, error) // CreateServer adds a new server to the database CreateServer(ctx context.Context, server *apiv0.ServerJSON) (*apiv0.ServerJSON, error) // UpdateServer updates an existing server record diff --git a/internal/database/memory.go b/internal/database/memory.go index d0ba3a6..26587b8 100644 --- a/internal/database/memory.go +++ b/internal/database/memory.go @@ -12,7 +12,7 @@ import ( // MemoryDB is an in-memory implementation of the Database interface type MemoryDB struct { - entries map[string]*apiv0.ServerJSON // maps registry metadata ID to ServerJSON + entries map[string]*apiv0.ServerJSON // maps registry metadata version_id to ServerJSON mu sync.RWMutex } @@ -80,7 +80,7 @@ func (db *MemoryDB) List( return result, nextCursor, nil } -func (db *MemoryDB) GetByID(ctx context.Context, id string) (*apiv0.ServerJSON, error) { +func (db *MemoryDB) GetByVersionID(ctx context.Context, versionID string) (*apiv0.ServerJSON, error) { if ctx.Err() != nil { return nil, ctx.Err() } @@ -88,8 +88,8 @@ func (db *MemoryDB) GetByID(ctx context.Context, id string) (*apiv0.ServerJSON, db.mu.RLock() defer db.mu.RUnlock() - // Find entry by registry metadata ID - if entry, exists := db.entries[id]; exists { + // Find entry by registry metadata version_id + if entry, exists := db.entries[versionID]; exists { // Return a copy of the ServerRecord entryCopy := *entry return &entryCopy, nil @@ -98,23 +98,112 @@ func (db *MemoryDB) GetByID(ctx context.Context, id string) (*apiv0.ServerJSON, return nil, ErrNotFound } +// GetByServerID retrieves the latest version of a server by server ID +func (db *MemoryDB) GetByServerID(ctx context.Context, serverID string) (*apiv0.ServerJSON, error) { + if ctx.Err() != nil { + return nil, ctx.Err() + } + + db.mu.RLock() + defer db.mu.RUnlock() + + // Find the latest version with the given server ID + var latestEntry *apiv0.ServerJSON + for _, entry := range db.entries { + if entry.Meta != nil && entry.Meta.Official != nil && + entry.Meta.Official.ServerID == serverID && + entry.Meta.Official.IsLatest { + latestEntry = entry + break + } + } + + if latestEntry == nil { + return nil, ErrNotFound + } + + // Return a copy + entryCopy := *latestEntry + return &entryCopy, nil +} + +// GetByServerIDAndVersion retrieves a specific version of a server by server ID and version +func (db *MemoryDB) GetByServerIDAndVersion(ctx context.Context, serverID string, version string) (*apiv0.ServerJSON, error) { + if ctx.Err() != nil { + return nil, ctx.Err() + } + + db.mu.RLock() + defer db.mu.RUnlock() + + // Find the entry with matching server ID and version + for _, entry := range db.entries { + if entry.Meta != nil && entry.Meta.Official != nil && + entry.Meta.Official.ServerID == serverID && + entry.Version == version { + // Return a copy + entryCopy := *entry + return &entryCopy, nil + } + } + + return nil, ErrNotFound +} + +// GetAllVersionsByServerID retrieves all versions of a server by server ID +func (db *MemoryDB) GetAllVersionsByServerID(ctx context.Context, serverID string) ([]*apiv0.ServerJSON, error) { + if ctx.Err() != nil { + return nil, ctx.Err() + } + + db.mu.RLock() + defer db.mu.RUnlock() + + var results []*apiv0.ServerJSON + for _, entry := range db.entries { + if entry.Meta != nil && entry.Meta.Official != nil && + entry.Meta.Official.ServerID == serverID { + // Add a copy + entryCopy := *entry + results = append(results, &entryCopy) + } + } + + if len(results) == 0 { + return nil, ErrNotFound + } + + // Sort by published date, latest first + sort.Slice(results, func(i, j int) bool { + iTime := results[i].Meta.Official.PublishedAt + jTime := results[j].Meta.Official.PublishedAt + return iTime.After(jTime) + }) + + return results, nil +} + func (db *MemoryDB) CreateServer(ctx context.Context, server *apiv0.ServerJSON) (*apiv0.ServerJSON, error) { if ctx.Err() != nil { return nil, ctx.Err() } - // Get the ID from the registry metadata + // Get the VersionID from the registry metadata if server.Meta == nil || server.Meta.Official == nil { - return nil, fmt.Errorf("server must have registry metadata with ID") + return nil, fmt.Errorf("server must have registry metadata with ServerID and VersionID") } - id := server.Meta.Official.ID + versionID := server.Meta.Official.VersionID + + if versionID == "" { + return nil, fmt.Errorf("server must have VersionID in registry metadata") + } db.mu.Lock() defer db.mu.Unlock() - // Store the record using registry metadata ID - db.entries[id] = server + // Store the record using registry metadata VersionID + db.entries[versionID] = server return server, nil } @@ -124,6 +213,11 @@ func (db *MemoryDB) UpdateServer(ctx context.Context, id string, server *apiv0.S return nil, ctx.Err() } + // Validate that meta structure exists and VersionID matches path (consistent with PostgreSQL implementation) + if server.Meta == nil || server.Meta.Official == nil || server.Meta.Official.VersionID != id { + return nil, fmt.Errorf("%w: io.modelcontextprotocol.registry/official.version_id must match path id (%s)", ErrInvalidInput, id) + } + db.mu.Lock() defer db.mu.Unlock() @@ -165,6 +259,7 @@ func (db *MemoryDB) filterAndSort(allEntries []*apiv0.ServerJSON, filter *Server } // matchesFilter checks if an entry matches the provided filter +// //nolint:cyclop // Filter matching logic is inherently complex but clear func (db *MemoryDB) matchesFilter(entry *apiv0.ServerJSON, filter *ServerFilter) bool { if filter == nil { @@ -218,7 +313,7 @@ func (db *MemoryDB) matchesFilter(entry *apiv0.ServerJSON, filter *ServerFilter) } } - // Check is_latest filter + // Check isLatest filter if filter.IsLatest != nil { if entry.Meta == nil || entry.Meta.Official == nil { return false @@ -231,10 +326,10 @@ func (db *MemoryDB) matchesFilter(entry *apiv0.ServerJSON, filter *ServerFilter) return true } -// getRegistryID safely extracts the registry ID from an entry +// getRegistryID safely extracts the registry version ID from an entry func (db *MemoryDB) getRegistryID(entry *apiv0.ServerJSON) string { if entry.Meta != nil && entry.Meta.Official != nil { - return entry.Meta.Official.ID + return entry.Meta.Official.VersionID } return "" } diff --git a/internal/database/migrations/005_add_server_id_rename_version_id.sql b/internal/database/migrations/005_add_server_id_rename_version_id.sql new file mode 100644 index 0000000..de29f5d --- /dev/null +++ b/internal/database/migrations/005_add_server_id_rename_version_id.sql @@ -0,0 +1,90 @@ +-- Migration to rename id to version_id and update JSON metadata +-- This implements the server ID consistency changes from GitHub issue #396 +-- +-- Current schema: servers(id VARCHAR, value JSONB) +-- Target schema: servers(version_id VARCHAR, value JSONB) +-- JSON metadata changes: +-- - rename "id" to "versionId" +-- - add "serverId" (consistent across versions of same server) + +BEGIN; + +-- Add the new version_id column +ALTER TABLE servers ADD COLUMN version_id VARCHAR(255); + +-- Create a temporary function to: +-- 1. Migrate id -> version_id column +-- 2. Update JSON metadata to add serverId and rename id to versionId +CREATE OR REPLACE FUNCTION migrate_to_server_version_ids() +RETURNS VOID AS $$ +DECLARE + rec RECORD; + server_name TEXT; + server_id_map JSONB := '{}'; + new_server_id UUID; + updated_meta JSONB; + updated_value JSONB; +BEGIN + -- Iterate through all records and assign server_id and version_id + FOR rec IN SELECT id, value FROM servers ORDER BY id LOOP + -- Extract server name from the JSONB value + server_name := rec.value->>'name'; + + -- Check if we already have a server_id for this server name + IF (server_id_map ? server_name) THEN + new_server_id := (server_id_map->>server_name)::UUID; + ELSE + -- Generate a new server_id for this server name + new_server_id := uuid_generate_v4(); + server_id_map := jsonb_set(server_id_map, ARRAY[server_name], to_jsonb(new_server_id::TEXT)); + END IF; + + -- Update the JSON metadata + updated_meta := rec.value->'_meta'->'io.modelcontextprotocol.registry/official'; + + -- Add serverId and rename id to versionId + updated_meta := updated_meta || jsonb_build_object( + 'serverId', new_server_id::TEXT, + 'versionId', updated_meta->>'id' + ); + + -- Remove the old 'id' field + updated_meta := updated_meta - 'id'; + + -- Update the full value with new metadata + updated_value := jsonb_set( + rec.value, + '{_meta,io.modelcontextprotocol.registry/official}', + updated_meta + ); + + -- Update the record with version_id and updated JSON + UPDATE servers + SET + version_id = rec.id, + value = updated_value + WHERE id = rec.id; + END LOOP; +END; +$$ LANGUAGE plpgsql; + +-- Execute the migration function +SELECT migrate_to_server_version_ids(); + +-- Drop the temporary function +DROP FUNCTION migrate_to_server_version_ids(); + +-- Make version_id NOT NULL now that all records have values +ALTER TABLE servers ALTER COLUMN version_id SET NOT NULL; + +-- Drop the old id column (replaced by version_id) +ALTER TABLE servers DROP COLUMN id; + +-- Make version_id the new primary key +ALTER TABLE servers ADD CONSTRAINT servers_pkey PRIMARY KEY (version_id); + +-- Update existing indexes to use version_id instead of id +DROP INDEX IF EXISTS idx_servers_id; +CREATE INDEX idx_servers_version_id ON servers(version_id); + +COMMIT; \ No newline at end of file diff --git a/internal/database/postgres.go b/internal/database/postgres.go index 420fc1e..8b7e4c6 100644 --- a/internal/database/postgres.go +++ b/internal/database/postgres.go @@ -11,6 +11,7 @@ import ( "github.com/google/uuid" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" + apiv0 "github.com/modelcontextprotocol/registry/pkg/api/v0" ) @@ -50,7 +51,7 @@ func NewPostgreSQL(ctx context.Context, connectionURI string) (*PostgreSQL, erro return nil, fmt.Errorf("failed to acquire connection for migrations: %w", err) } defer conn.Release() - + migrator := NewMigrator(conn.Conn()) if err := migrator.Migrate(ctx); err != nil { return nil, fmt.Errorf("failed to run database migrations: %w", err) @@ -94,7 +95,7 @@ func (db *PostgreSQL) List( argIndex++ } if filter.UpdatedSince != nil { - whereConditions = append(whereConditions, fmt.Sprintf("(value->'_meta'->'io.modelcontextprotocol.registry/official'->>'updated_at')::timestamp > $%d", argIndex)) + whereConditions = append(whereConditions, fmt.Sprintf("(value->'_meta'->'io.modelcontextprotocol.registry/official'->>'updatedAt')::timestamp > $%d", argIndex)) args = append(args, *filter.UpdatedSince) argIndex++ } @@ -109,18 +110,18 @@ func (db *PostgreSQL) List( argIndex++ } if filter.IsLatest != nil { - whereConditions = append(whereConditions, fmt.Sprintf("(value->'_meta'->'io.modelcontextprotocol.registry/official'->>'is_latest')::boolean = $%d", argIndex)) + whereConditions = append(whereConditions, fmt.Sprintf("(value->'_meta'->'io.modelcontextprotocol.registry/official'->>'isLatest')::boolean = $%d", argIndex)) args = append(args, *filter.IsLatest) argIndex++ } } - // Add cursor pagination using primary key ID + // Add cursor pagination using primary key version_id if cursor != "" { if _, err := uuid.Parse(cursor); err != nil { return nil, "", fmt.Errorf("invalid cursor format: %w", err) } - whereConditions = append(whereConditions, fmt.Sprintf("id > $%d", argIndex)) + whereConditions = append(whereConditions, fmt.Sprintf("version_id > $%d", argIndex)) args = append(args, cursor) argIndex++ } @@ -136,7 +137,7 @@ func (db *PostgreSQL) List( SELECT value FROM servers %s - ORDER BY id + ORDER BY version_id LIMIT $%d `, whereClause, argIndex) args = append(args, limit) @@ -169,19 +170,19 @@ func (db *PostgreSQL) List( return nil, "", fmt.Errorf("error iterating rows: %w", err) } - // Determine next cursor using registry metadata ID + // Determine next cursor using registry metadata VersionID nextCursor := "" if len(results) > 0 && len(results) >= limit { lastResult := results[len(results)-1] if lastResult.Meta != nil && lastResult.Meta.Official != nil { - nextCursor = lastResult.Meta.Official.ID + nextCursor = lastResult.Meta.Official.VersionID } } return results, nextCursor, nil } -func (db *PostgreSQL) GetByID(ctx context.Context, id string) (*apiv0.ServerJSON, error) { +func (db *PostgreSQL) GetByVersionID(ctx context.Context, versionID string) (*apiv0.ServerJSON, error) { if ctx.Err() != nil { return nil, ctx.Err() } @@ -189,12 +190,12 @@ func (db *PostgreSQL) GetByID(ctx context.Context, id string) (*apiv0.ServerJSON query := ` SELECT value FROM servers - WHERE id = $1 + WHERE version_id = $1 ` var valueJSON []byte - err := db.pool.QueryRow(ctx, query, id).Scan(&valueJSON) + err := db.pool.QueryRow(ctx, query, versionID).Scan(&valueJSON) if err != nil { if errors.Is(err, pgx.ErrNoRows) { @@ -212,18 +213,138 @@ func (db *PostgreSQL) GetByID(ctx context.Context, id string) (*apiv0.ServerJSON return &serverJSON, nil } +// GetByServerID retrieves the latest version of a server by server ID +func (db *PostgreSQL) GetByServerID(ctx context.Context, serverID string) (*apiv0.ServerJSON, error) { + if ctx.Err() != nil { + return nil, ctx.Err() + } + + query := ` + SELECT value + FROM servers + WHERE (value->'_meta'->'io.modelcontextprotocol.registry/official'->>'serverId') = $1 AND (value->'_meta'->'io.modelcontextprotocol.registry/official'->>'isLatest')::boolean = true + ORDER BY (value->'_meta'->'io.modelcontextprotocol.registry/official'->>'publishedAt')::timestamp DESC + LIMIT 1 + ` + + var valueJSON []byte + + err := db.pool.QueryRow(ctx, query, serverID).Scan(&valueJSON) + + if err != nil { + if errors.Is(err, pgx.ErrNoRows) { + return nil, ErrNotFound + } + return nil, fmt.Errorf("failed to get server by server ID: %w", err) + } + + // Parse the complete ServerJSON from JSONB + var serverJSON apiv0.ServerJSON + if err := json.Unmarshal(valueJSON, &serverJSON); err != nil { + return nil, fmt.Errorf("failed to unmarshal server JSON: %w", err) + } + + return &serverJSON, nil +} + +// GetByServerIDAndVersion retrieves a specific version of a server by server ID and version +func (db *PostgreSQL) GetByServerIDAndVersion(ctx context.Context, serverID string, version string) (*apiv0.ServerJSON, error) { + if ctx.Err() != nil { + return nil, ctx.Err() + } + + query := ` + SELECT value + FROM servers + WHERE (value->'_meta'->'io.modelcontextprotocol.registry/official'->>'serverId') = $1 AND value->>'version' = $2 + LIMIT 1 + ` + + var valueJSON []byte + + err := db.pool.QueryRow(ctx, query, serverID, version).Scan(&valueJSON) + + if err != nil { + if errors.Is(err, pgx.ErrNoRows) { + return nil, ErrNotFound + } + return nil, fmt.Errorf("failed to get server by server ID and version: %w", err) + } + + // Parse the complete ServerJSON from JSONB + var serverJSON apiv0.ServerJSON + if err := json.Unmarshal(valueJSON, &serverJSON); err != nil { + return nil, fmt.Errorf("failed to unmarshal server JSON: %w", err) + } + + return &serverJSON, nil +} + +// GetAllVersionsByServerID retrieves all versions of a server by server ID +func (db *PostgreSQL) GetAllVersionsByServerID(ctx context.Context, serverID string) ([]*apiv0.ServerJSON, error) { + if ctx.Err() != nil { + return nil, ctx.Err() + } + + query := ` + SELECT value + FROM servers + WHERE (value->'_meta'->'io.modelcontextprotocol.registry/official'->>'serverId') = $1 + ORDER BY (value->'_meta'->'io.modelcontextprotocol.registry/official'->>'publishedAt')::timestamp DESC + ` + + rows, err := db.pool.Query(ctx, query, serverID) + if err != nil { + return nil, fmt.Errorf("failed to query server versions: %w", err) + } + defer rows.Close() + + var results []*apiv0.ServerJSON + for rows.Next() { + var valueJSON []byte + + err := rows.Scan(&valueJSON) + if err != nil { + return nil, fmt.Errorf("failed to scan server row: %w", err) + } + + // Parse the complete ServerJSON from JSONB + var serverJSON apiv0.ServerJSON + if err := json.Unmarshal(valueJSON, &serverJSON); err != nil { + return nil, fmt.Errorf("failed to unmarshal server JSON: %w", err) + } + + results = append(results, &serverJSON) + } + + if err := rows.Err(); err != nil { + return nil, fmt.Errorf("error iterating rows: %w", err) + } + + if len(results) == 0 { + return nil, ErrNotFound + } + + return results, nil +} + // CreateServer adds a new server to the database func (db *PostgreSQL) CreateServer(ctx context.Context, server *apiv0.ServerJSON) (*apiv0.ServerJSON, error) { if ctx.Err() != nil { return nil, ctx.Err() } - // Get the ID from the registry metadata + // Get the IDs from the registry metadata if server.Meta == nil || server.Meta.Official == nil { - return nil, fmt.Errorf("server must have registry metadata with ID") + return nil, fmt.Errorf("server must have registry metadata with ServerID and VersionID") } - id := server.Meta.Official.ID + serverID := server.Meta.Official.ServerID + versionID := server.Meta.Official.VersionID + + if serverID == "" || versionID == "" { + return nil, fmt.Errorf("server must have both ServerID and VersionID in registry metadata") + } // Marshal the complete server to JSONB valueJSON, err := json.Marshal(server) @@ -231,13 +352,13 @@ func (db *PostgreSQL) CreateServer(ctx context.Context, server *apiv0.ServerJSON return nil, fmt.Errorf("failed to marshal server JSON: %w", err) } - // Insert into simple servers table + // Insert into servers table with new schema (only version_id column, serverId is in JSON) query := ` - INSERT INTO servers (id, value) + INSERT INTO servers (version_id, value) VALUES ($1, $2) ` - _, err = db.pool.Exec(ctx, query, id, valueJSON) + _, err = db.pool.Exec(ctx, query, versionID, valueJSON) if err != nil { return nil, fmt.Errorf("failed to insert server: %w", err) } @@ -251,9 +372,9 @@ func (db *PostgreSQL) UpdateServer(ctx context.Context, id string, server *apiv0 return nil, ctx.Err() } - // Validate that meta structure exists and ID matches path - if server.Meta == nil || server.Meta.Official == nil || server.Meta.Official.ID != id { - return nil, fmt.Errorf("%w: io.modelcontextprotocol.registry/official.id must match path id (%s)", ErrInvalidInput, id) + // Validate that meta structure exists and VersionID matches path + if server.Meta == nil || server.Meta.Official == nil || server.Meta.Official.VersionID != id { + return nil, fmt.Errorf("%w: io.modelcontextprotocol.registry/official.version_id must match path id (%s)", ErrInvalidInput, id) } // Marshal updated server @@ -262,11 +383,11 @@ func (db *PostgreSQL) UpdateServer(ctx context.Context, id string, server *apiv0 return nil, fmt.Errorf("failed to marshal updated server: %w", err) } - // Update the complete server record in simple table + // Update the complete server record using version_id query := ` UPDATE servers SET value = $1 - WHERE id = $2 + WHERE version_id = $2 ` result, err := db.pool.Exec(ctx, query, valueJSON, id) diff --git a/internal/importer/importer_test.go b/internal/importer/importer_test.go index 99fbbd4..ae02765 100644 --- a/internal/importer/importer_test.go +++ b/internal/importer/importer_test.go @@ -32,7 +32,8 @@ func TestImportService_LocalFile(t *testing.T) { Version: "1.0.0", Meta: &apiv0.ServerMeta{ Official: &apiv0.RegistryExtensions{ - ID: "test-id-1", + ServerID: "server-id-1", + VersionID: "test-id-1", PublishedAt: time.Now(), UpdatedAt: time.Now(), IsLatest: true, @@ -76,7 +77,8 @@ func TestImportService_HTTPFile(t *testing.T) { Version: "2.0.0", Meta: &apiv0.ServerMeta{ Official: &apiv0.RegistryExtensions{ - ID: "test-id-2", + ServerID: "server-id-test", + VersionID: "test-id-2", PublishedAt: time.Now(), UpdatedAt: time.Now(), IsLatest: true, @@ -119,7 +121,8 @@ func TestImportService_RegistryAPI(t *testing.T) { Version: "1.0.0", Meta: &apiv0.ServerMeta{ Official: &apiv0.RegistryExtensions{ - ID: "api-test-id-1", + ServerID: "server-id-test", + VersionID: "api-test-id-1", PublishedAt: time.Now(), UpdatedAt: time.Now(), IsLatest: true, @@ -137,7 +140,8 @@ func TestImportService_RegistryAPI(t *testing.T) { Version: "2.0.0", Meta: &apiv0.ServerMeta{ Official: &apiv0.RegistryExtensions{ - ID: "api-test-id-2", + ServerID: "server-id-test", + VersionID: "api-test-id-2", PublishedAt: time.Now(), UpdatedAt: time.Now(), IsLatest: true, diff --git a/internal/service/registry_service.go b/internal/service/registry_service.go index 86dc010..feea174 100644 --- a/internal/service/registry_service.go +++ b/internal/service/registry_service.go @@ -55,13 +55,13 @@ func (s *registryServiceImpl) List(filter *database.ServerFilter, cursor string, return result, nextCursor, nil } -// GetByID retrieves a specific server by its registry metadata ID in flattened format -func (s *registryServiceImpl) GetByID(id string) (*apiv0.ServerJSON, error) { +// GetByVersionID retrieves a specific server by its registry metadata version ID +func (s *registryServiceImpl) GetByVersionID(versionID string) (*apiv0.ServerJSON, error) { // Create a timeout context for the database operation ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() - serverRecord, err := s.db.GetByID(ctx, id) + serverRecord, err := s.db.GetByVersionID(ctx, versionID) if err != nil { return nil, err } @@ -70,6 +70,56 @@ func (s *registryServiceImpl) GetByID(id string) (*apiv0.ServerJSON, error) { return serverRecord, nil } +// GetByServerID retrieves the latest version of a server by its server ID +func (s *registryServiceImpl) GetByServerID(serverID string) (*apiv0.ServerJSON, error) { + // Create a timeout context for the database operation + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + serverRecord, err := s.db.GetByServerID(ctx, serverID) + if err != nil { + return nil, err + } + + // Return the server record directly + return serverRecord, nil +} + +// GetByServerIDAndVersion retrieves a specific version of a server by server ID and version +func (s *registryServiceImpl) GetByServerIDAndVersion(serverID string, version string) (*apiv0.ServerJSON, error) { + // Create a timeout context for the database operation + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + serverRecord, err := s.db.GetByServerIDAndVersion(ctx, serverID, version) + if err != nil { + return nil, err + } + + // Return the server record directly + return serverRecord, nil +} + +// GetAllVersionsByServerID retrieves all versions of a server by server ID +func (s *registryServiceImpl) GetAllVersionsByServerID(serverID string) ([]apiv0.ServerJSON, error) { + // Create a timeout context for the database operation + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + serverRecords, err := s.db.GetAllVersionsByServerID(ctx, serverID) + if err != nil { + return nil, err + } + + // Return ServerJSONs directly + result := make([]apiv0.ServerJSON, len(serverRecords)) + for i, record := range serverRecords { + result[i] = *record + } + + return result, nil +} + // Publish publishes a server with flattened _meta extensions func (s *registryServiceImpl) Publish(req apiv0.ServerJSON) (*apiv0.ServerJSON, error) { // Create a timeout context for the database operation @@ -125,20 +175,7 @@ func (s *registryServiceImpl) Publish(req apiv0.ServerJSON) (*apiv0.ServerJSON, } // Create complete server with metadata - server := serverJSON // Copy the input - - // Initialize meta if not present - if server.Meta == nil { - server.Meta = &apiv0.ServerMeta{} - } - - // Set registry metadata - server.Meta.Official = &apiv0.RegistryExtensions{ - ID: uuid.New().String(), - PublishedAt: publishTime, - UpdatedAt: publishTime, - IsLatest: isNewLatest, - } + server := s.createServerWithMetadata(serverJSON, existingServerVersions, publishTime, isNewLatest) // Create server in database serverRecord, err := s.db.CreateServer(ctx, &server) @@ -148,15 +185,15 @@ func (s *registryServiceImpl) Publish(req apiv0.ServerJSON) (*apiv0.ServerJSON, // Mark previous latest as no longer latest if isNewLatest && existingLatest != nil { - var existingLatestID string + var existingLatestVersionID string if existingLatest.Meta != nil && existingLatest.Meta.Official != nil { - existingLatestID = existingLatest.Meta.Official.ID + existingLatestVersionID = existingLatest.Meta.Official.VersionID } - if existingLatestID != "" { - // Update the existing server to set is_latest = false + if existingLatestVersionID != "" { + // Update the existing server to set isLatest = false existingLatest.Meta.Official.IsLatest = false existingLatest.Meta.Official.UpdatedAt = time.Now() - if _, err := s.db.UpdateServer(ctx, existingLatestID, existingLatest); err != nil { + if _, err := s.db.UpdateServer(ctx, existingLatestVersionID, existingLatest); err != nil { return nil, err } } @@ -166,6 +203,46 @@ func (s *registryServiceImpl) Publish(req apiv0.ServerJSON) (*apiv0.ServerJSON, return serverRecord, nil } +// createServerWithMetadata creates a server with proper metadata including server_id and version_id +func (s *registryServiceImpl) createServerWithMetadata( + serverJSON apiv0.ServerJSON, + existingServerVersions []*apiv0.ServerJSON, + publishTime time.Time, + isNewLatest bool, +) apiv0.ServerJSON { + server := serverJSON // Copy the input + + // Initialize meta if not present + if server.Meta == nil { + server.Meta = &apiv0.ServerMeta{} + } + + // Determine server_id - either from existing versions or generate new one + var serverID string + if len(existingServerVersions) > 0 { + // Use existing server_id from any existing version + firstExisting := existingServerVersions[0] + if firstExisting.Meta != nil && firstExisting.Meta.Official != nil { + serverID = firstExisting.Meta.Official.ServerID + } + } + if serverID == "" { + // This is the first version of a new server + serverID = uuid.New().String() + } + + // Set registry metadata + server.Meta.Official = &apiv0.RegistryExtensions{ + ServerID: serverID, + VersionID: uuid.New().String(), + PublishedAt: publishTime, + UpdatedAt: publishTime, + IsLatest: isNewLatest, + } + + return server +} + // validateNoDuplicateRemoteURLs checks that no other server is using the same remote URLs func (s *registryServiceImpl) validateNoDuplicateRemoteURLs(ctx context.Context, serverDetail apiv0.ServerJSON) error { // Check each remote URL in the new server for conflicts @@ -201,24 +278,45 @@ func (s *registryServiceImpl) getCurrentLatestVersion(existingServerVersions []* } // EditServer updates an existing server with new details (admin operation) -func (s *registryServiceImpl) EditServer(id string, req apiv0.ServerJSON) (*apiv0.ServerJSON, error) { +func (s *registryServiceImpl) EditServer(versionID string, req apiv0.ServerJSON) (*apiv0.ServerJSON, error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() + // First get the current server to preserve metadata + currentServer, err := s.db.GetByVersionID(ctx, versionID) + if err != nil { + return nil, err + } + // Validate the request if err := validators.ValidatePublishRequest(req, s.cfg); err != nil { return nil, err } - serverJSON := req + // Merge the request with the current server, preserving metadata + updatedServer := *currentServer // Copy the current server with all metadata - // Check for duplicate remote URLs - if err := s.validateNoDuplicateRemoteURLs(ctx, serverJSON); err != nil { + // Update only the user-modifiable fields from the request + updatedServer.Name = req.Name + updatedServer.Description = req.Description + updatedServer.Version = req.Version + updatedServer.Status = req.Status + updatedServer.Repository = req.Repository + updatedServer.Remotes = req.Remotes + updatedServer.Packages = req.Packages + + // Update the UpdatedAt timestamp in metadata + if updatedServer.Meta != nil && updatedServer.Meta.Official != nil { + updatedServer.Meta.Official.UpdatedAt = time.Now() + } + + // Check for duplicate remote URLs using the updated server + if err := s.validateNoDuplicateRemoteURLs(ctx, updatedServer); err != nil { return nil, err } // Update server in database - serverRecord, err := s.db.UpdateServer(ctx, id, &serverJSON) + serverRecord, err := s.db.UpdateServer(ctx, versionID, &updatedServer) if err != nil { return nil, err } diff --git a/internal/service/registry_service_test.go b/internal/service/registry_service_test.go index 94ffdcc..63eaf86 100644 --- a/internal/service/registry_service_test.go +++ b/internal/service/registry_service_test.go @@ -18,7 +18,7 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) { "existing1": { Name: "com.example/existing-server", Description: "An existing server", - Version: "1.0.0", + Version: "1.0.0", Remotes: []model.Transport{ {Type: "streamable-http", URL: "https://api.example.com/mcp"}, {Type: "sse", URL: "https://webhook.example.com/sse"}, @@ -27,7 +27,7 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) { "existing2": { Name: "com.microsoft/another-server", Description: "Another existing server", - Version: "1.0.0", + Version: "1.0.0", Remotes: []model.Transport{ {Type: "streamable-http", URL: "https://api.microsoft.com/mcp"}, }, @@ -55,8 +55,8 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) { serverDetail: apiv0.ServerJSON{ Name: "com.example/new-server", Description: "A new server with no remotes", - Version: "1.0.0", - Remotes: []model.Transport{}, + Version: "1.0.0", + Remotes: []model.Transport{}, }, expectError: false, }, @@ -65,7 +65,7 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) { serverDetail: apiv0.ServerJSON{ Name: "com.example/new-server", Description: "A new server", - Version: "1.0.0", + Version: "1.0.0", Remotes: []model.Transport{ {Type: "streamable-http", URL: "https://new.example.com/mcp"}, {Type: "sse", URL: "https://unique.example.com/sse"}, @@ -78,7 +78,7 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) { serverDetail: apiv0.ServerJSON{ Name: "com.example/new-server", Description: "A new server with duplicate URL", - Version: "1.0.0", + Version: "1.0.0", Remotes: []model.Transport{ {Type: "streamable-http", URL: "https://api.example.com/mcp"}, // This URL already exists }, @@ -91,7 +91,7 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) { serverDetail: apiv0.ServerJSON{ Name: "com.example/existing-server", // Same name as existing Description: "Updated existing server", - Version: "1.1.0", + Version: "1.1.0", Remotes: []model.Transport{ {Type: "streamable-http", URL: "https://api.example.com/mcp"}, // Same URL as before }, @@ -116,3 +116,264 @@ func TestValidateNoDuplicateRemoteURLs(t *testing.T) { }) } } + +func TestGetByServerID(t *testing.T) { + memDB := database.NewMemoryDB() + service := NewRegistryService(memDB, &config.Config{EnableRegistryValidation: false}) + + // Publish multiple versions of the same server + server1, err := service.Publish(apiv0.ServerJSON{ + Name: "com.example/test-server", + Description: "Test server v1", + Version: "1.0.0", + }) + assert.NoError(t, err) + + _, err = service.Publish(apiv0.ServerJSON{ + Name: "com.example/test-server", + Description: "Test server v2", + Version: "2.0.0", + }) + assert.NoError(t, err) + + tests := []struct { + name string + serverID string + expectError bool + errorMsg string + checkResult func(*testing.T, *apiv0.ServerJSON) + }{ + { + name: "get latest version by server ID", + serverID: server1.Meta.Official.ServerID, + expectError: false, + checkResult: func(t *testing.T, result *apiv0.ServerJSON) { + t.Helper() + assert.Equal(t, "2.0.0", result.Version) // Should get latest version + assert.Equal(t, "Test server v2", result.Description) + assert.True(t, result.Meta.Official.IsLatest) + }, + }, + { + name: "server not found", + serverID: "00000000-0000-0000-0000-000000000000", + expectError: true, + errorMsg: "record not found", + }, + { + name: "invalid server ID format", + serverID: "invalid-uuid", + expectError: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := service.GetByServerID(tt.serverID) + + if tt.expectError { + assert.Error(t, err) + if tt.errorMsg != "" { + assert.Contains(t, err.Error(), tt.errorMsg) + } + assert.Nil(t, result) + } else { + assert.NoError(t, err) + assert.NotNil(t, result) + if tt.checkResult != nil { + tt.checkResult(t, result) + } + } + }) + } +} + +func TestGetByServerIDAndVersion(t *testing.T) { + memDB := database.NewMemoryDB() + service := NewRegistryService(memDB, &config.Config{EnableRegistryValidation: false}) + + // Publish multiple versions of the same server + server1, err := service.Publish(apiv0.ServerJSON{ + Name: "com.example/versioned-server", + Description: "Versioned server v1", + Version: "1.0.0", + }) + assert.NoError(t, err) + + _, err = service.Publish(apiv0.ServerJSON{ + Name: "com.example/versioned-server", + Description: "Versioned server v2", + Version: "2.0.0", + }) + assert.NoError(t, err) + + tests := []struct { + name string + serverID string + version string + expectError bool + errorMsg string + checkResult func(*testing.T, *apiv0.ServerJSON) + }{ + { + name: "get specific version 1.0.0", + serverID: server1.Meta.Official.ServerID, + version: "1.0.0", + expectError: false, + checkResult: func(t *testing.T, result *apiv0.ServerJSON) { + t.Helper() + assert.Equal(t, "1.0.0", result.Version) + assert.Equal(t, "Versioned server v1", result.Description) + assert.False(t, result.Meta.Official.IsLatest) + }, + }, + { + name: "get specific version 2.0.0", + serverID: server1.Meta.Official.ServerID, + version: "2.0.0", + expectError: false, + checkResult: func(t *testing.T, result *apiv0.ServerJSON) { + t.Helper() + assert.Equal(t, "2.0.0", result.Version) + assert.Equal(t, "Versioned server v2", result.Description) + assert.True(t, result.Meta.Official.IsLatest) + }, + }, + { + name: "version not found", + serverID: server1.Meta.Official.ServerID, + version: "3.0.0", + expectError: true, + errorMsg: "record not found", + }, + { + name: "server not found", + serverID: "00000000-0000-0000-0000-000000000000", + version: "1.0.0", + expectError: true, + errorMsg: "record not found", + }, + { + name: "invalid server ID format", + serverID: "invalid-uuid", + version: "1.0.0", + expectError: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := service.GetByServerIDAndVersion(tt.serverID, tt.version) + + if tt.expectError { + assert.Error(t, err) + if tt.errorMsg != "" { + assert.Contains(t, err.Error(), tt.errorMsg) + } + assert.Nil(t, result) + } else { + assert.NoError(t, err) + assert.NotNil(t, result) + if tt.checkResult != nil { + tt.checkResult(t, result) + } + } + }) + } +} + +func TestGetAllVersionsByServerID(t *testing.T) { + memDB := database.NewMemoryDB() + service := NewRegistryService(memDB, &config.Config{EnableRegistryValidation: false}) + + // Publish multiple versions of the same server + server1, err := service.Publish(apiv0.ServerJSON{ + Name: "com.example/multi-version-server", + Description: "Multi-version server v1", + Version: "1.0.0", + }) + assert.NoError(t, err) + + _, err = service.Publish(apiv0.ServerJSON{ + Name: "com.example/multi-version-server", + Description: "Multi-version server v2", + Version: "2.0.0", + }) + assert.NoError(t, err) + + _, err = service.Publish(apiv0.ServerJSON{ + Name: "com.example/multi-version-server", + Description: "Multi-version server v2.1", + Version: "2.1.0", + }) + assert.NoError(t, err) + + tests := []struct { + name string + serverID string + expectError bool + errorMsg string + checkResult func(*testing.T, []apiv0.ServerJSON) + }{ + { + name: "get all versions of server", + serverID: server1.Meta.Official.ServerID, + expectError: false, + checkResult: func(t *testing.T, result []apiv0.ServerJSON) { + t.Helper() + assert.Len(t, result, 3) + + // Collect versions + versions := make([]string, 0, len(result)) + latestCount := 0 + for _, server := range result { + versions = append(versions, server.Version) + assert.Equal(t, server1.Meta.Official.ServerID, server.Meta.Official.ServerID) + assert.Equal(t, "com.example/multi-version-server", server.Name) + if server.Meta.Official.IsLatest { + latestCount++ + } + } + + // Verify all versions are present + assert.Contains(t, versions, "1.0.0") + assert.Contains(t, versions, "2.0.0") + assert.Contains(t, versions, "2.1.0") + + // Only one should be marked as latest + assert.Equal(t, 1, latestCount) + }, + }, + { + name: "server not found", + serverID: "00000000-0000-0000-0000-000000000000", + expectError: true, + errorMsg: "record not found", + }, + { + name: "invalid server ID format", + serverID: "invalid-uuid", + expectError: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := service.GetAllVersionsByServerID(tt.serverID) + + if tt.expectError { + assert.Error(t, err) + if tt.errorMsg != "" { + assert.Contains(t, err.Error(), tt.errorMsg) + } + assert.Empty(t, result) + } else { + assert.NoError(t, err) + assert.NotEmpty(t, result) + if tt.checkResult != nil { + tt.checkResult(t, result) + } + } + }) + } +} diff --git a/internal/service/service.go b/internal/service/service.go index fd6ebfd..dc6a536 100644 --- a/internal/service/service.go +++ b/internal/service/service.go @@ -9,8 +9,14 @@ import ( type RegistryService interface { // Retrieve all servers with optional filtering List(filter *database.ServerFilter, cursor string, limit int) ([]apiv0.ServerJSON, string, error) - // Retrieve a single server by registry metadata ID - GetByID(id string) (*apiv0.ServerJSON, error) + // Retrieve a single server by registry metadata version ID + GetByVersionID(versionID string) (*apiv0.ServerJSON, error) + // Retrieve latest version of a server by server ID + GetByServerID(serverID string) (*apiv0.ServerJSON, error) + // Retrieve specific version of a server by server ID and version + GetByServerIDAndVersion(serverID string, version string) (*apiv0.ServerJSON, error) + // Retrieve all versions of a server by server ID + GetAllVersionsByServerID(serverID string) ([]apiv0.ServerJSON, error) // Publish a server Publish(req apiv0.ServerJSON) (*apiv0.ServerJSON, error) // Update an existing server diff --git a/internal/validators/registries/mcpb.go b/internal/validators/registries/mcpb.go index fe8d325..fa45886 100644 --- a/internal/validators/registries/mcpb.go +++ b/internal/validators/registries/mcpb.go @@ -15,7 +15,7 @@ import ( func ValidateMCPB(ctx context.Context, pkg model.Package, _ string) error { // MCPB packages must include a file hash for integrity verification if pkg.FileSHA256 == "" { - return fmt.Errorf("MCPB package must include a file_sha256 hash for integrity verification") + return fmt.Errorf("MCPB package must include a fileSha256 hash for integrity verification") } err := validateMCPBUrl(pkg.Identifier) diff --git a/internal/validators/registries/mcpb_test.go b/internal/validators/registries/mcpb_test.go index e7a54e0..8167f5b 100644 --- a/internal/validators/registries/mcpb_test.go +++ b/internal/validators/registries/mcpb_test.go @@ -40,7 +40,7 @@ func TestValidateMCPB(t *testing.T) { serverName: "com.example/test", fileSHA256: "", expectError: true, - errorMessage: "must include a file_sha256 hash for integrity verification", + errorMessage: "must include a fileSha256 hash for integrity verification", }, { name: "non-existent .mcpb package should fail accessibility check", diff --git a/internal/validators/validators.go b/internal/validators/validators.go index 4ce45ac..3b448e9 100644 --- a/internal/validators/validators.go +++ b/internal/validators/validators.go @@ -118,17 +118,17 @@ func validateWebsiteURL(websiteURL string) error { // Parse the URL to ensure it's valid parsedURL, err := url.Parse(websiteURL) if err != nil { - return fmt.Errorf("invalid website URL: %w", err) + return fmt.Errorf("invalid websiteUrl: %w", err) } // Ensure it's an absolute URL with valid scheme if !parsedURL.IsAbs() { - return fmt.Errorf("website URL must be absolute (include scheme): %s", websiteURL) + return fmt.Errorf("websiteUrl must be absolute (include scheme): %s", websiteURL) } // Only allow HTTP/HTTPS schemes for security if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" { - return fmt.Errorf("website URL must use http or https scheme: %s", websiteURL) + return fmt.Errorf("websiteUrl must use http or https scheme: %s", websiteURL) } return nil @@ -438,7 +438,7 @@ func validateWebsiteURLNamespaceMatch(serverJSON apiv0.ServerJSON) error { namespace := serverJSON.Name if err := validateRemoteURLMatchesNamespace(serverJSON.WebsiteURL, namespace); err != nil { - return fmt.Errorf("website URL %s does not match namespace %s: %w", serverJSON.WebsiteURL, namespace, err) + return fmt.Errorf("websiteUrl %s does not match namespace %s: %w", serverJSON.WebsiteURL, namespace, err) } return nil diff --git a/internal/validators/validators_test.go b/internal/validators/validators_test.go index 0413352..a2c5735 100644 --- a/internal/validators/validators_test.go +++ b/internal/validators/validators_test.go @@ -4,11 +4,12 @@ import ( "fmt" "testing" + "github.com/stretchr/testify/assert" + "github.com/modelcontextprotocol/registry/internal/config" "github.com/modelcontextprotocol/registry/internal/validators" apiv0 "github.com/modelcontextprotocol/registry/pkg/api/v0" "github.com/modelcontextprotocol/registry/pkg/model" - "github.com/stretchr/testify/assert" ) func TestValidate(t *testing.T) { @@ -345,7 +346,7 @@ func TestValidate(t *testing.T) { expectedError: validators.ErrInvalidSubfolderPath.Error(), }, { - name: "server with valid website URL", + name: "server with valid websiteUrl", serverDetail: apiv0.ServerJSON{ Name: "com.example/test-server", Description: "A test server", @@ -359,7 +360,7 @@ func TestValidate(t *testing.T) { expectedError: "", }, { - name: "server with invalid website URL - no scheme", + name: "server with invalid websiteUrl - no scheme", serverDetail: apiv0.ServerJSON{ Name: "com.example/test-server", Description: "A test server", @@ -370,10 +371,10 @@ func TestValidate(t *testing.T) { Version: "1.0.0", WebsiteURL: "example.com/docs", }, - expectedError: "website URL must be absolute (include scheme): example.com/docs", + expectedError: "websiteUrl must be absolute (include scheme): example.com/docs", }, { - name: "server with invalid website URL - invalid scheme", + name: "server with invalid websiteUrl - invalid scheme", serverDetail: apiv0.ServerJSON{ Name: "com.example/test-server", Description: "A test server", @@ -384,10 +385,10 @@ func TestValidate(t *testing.T) { Version: "1.0.0", WebsiteURL: "ftp://example.com/docs", }, - expectedError: "website URL must use http or https scheme: ftp://example.com/docs", + expectedError: "websiteUrl must use http or https scheme: ftp://example.com/docs", }, { - name: "server with malformed website URL", + name: "server with malformed websiteUrl", serverDetail: apiv0.ServerJSON{ Name: "com.example/test-server", Description: "A test server", @@ -398,10 +399,10 @@ func TestValidate(t *testing.T) { Version: "1.0.0", WebsiteURL: "ht tp://example.com/docs", }, - expectedError: "invalid website URL:", + expectedError: "invalid websiteUrl:", }, { - name: "server with website URL that matches namespace domain", + name: "server with websiteUrl that matches namespace domain", serverDetail: apiv0.ServerJSON{ Name: "com.example/test-server", Description: "A test server", @@ -415,7 +416,7 @@ func TestValidate(t *testing.T) { expectedError: "", }, { - name: "server with website URL subdomain that matches namespace", + name: "server with websiteUrl subdomain that matches namespace", serverDetail: apiv0.ServerJSON{ Name: "com.example/test-server", Description: "A test server", @@ -429,7 +430,7 @@ func TestValidate(t *testing.T) { expectedError: "", }, { - name: "server with website URL that does not match namespace", + name: "server with websiteUrl that does not match namespace", serverDetail: apiv0.ServerJSON{ Name: "com.example/test-server", Description: "A test server", @@ -440,7 +441,7 @@ func TestValidate(t *testing.T) { Version: "1.0.0", WebsiteURL: "https://different.com/docs", }, - expectedError: "website URL https://different.com/docs does not match namespace com.example/test-server", + expectedError: "websiteUrl https://different.com/docs does not match namespace com.example/test-server", }, { name: "package with spaces in name", diff --git a/pkg/api/v0/types.go b/pkg/api/v0/types.go index 700221d..3d6589f 100644 --- a/pkg/api/v0/types.go +++ b/pkg/api/v0/types.go @@ -8,10 +8,11 @@ import ( // RegistryExtensions represents registry-generated metadata type RegistryExtensions struct { - ID string `json:"id"` - PublishedAt time.Time `json:"published_at"` - UpdatedAt time.Time `json:"updated_at,omitempty"` - IsLatest bool `json:"is_latest"` + ServerID string `json:"serverId"` // Consistent ID across all versions of a server + VersionID string `json:"versionId"` // Unique ID for this specific version + PublishedAt time.Time `json:"publishedAt"` + UpdatedAt time.Time `json:"updatedAt,omitempty"` + IsLatest bool `json:"isLatest"` } // ServerListResponse represents the paginated server list response @@ -22,22 +23,22 @@ type ServerListResponse struct { // ServerMeta represents the structured metadata with known extension fields type ServerMeta struct { - Official *RegistryExtensions `json:"io.modelcontextprotocol.registry/official,omitempty"` + Official *RegistryExtensions `json:"io.modelcontextprotocol.registry/official,omitempty"` PublisherProvided map[string]interface{} `json:"io.modelcontextprotocol.registry/publisher-provided,omitempty"` } // ServerJSON represents complete server information as defined in the MCP spec, with extension support type ServerJSON struct { - Schema string `json:"$schema,omitempty"` - Name string `json:"name" minLength:"1" maxLength:"200"` - Description string `json:"description" minLength:"1" maxLength:"100"` - Status model.Status `json:"status,omitempty" minLength:"1"` - Repository model.Repository `json:"repository,omitempty"` - Version string `json:"version"` - WebsiteURL string `json:"website_url,omitempty"` - Packages []model.Package `json:"packages,omitempty"` - Remotes []model.Transport `json:"remotes,omitempty"` - Meta *ServerMeta `json:"_meta,omitempty"` + Schema string `json:"$schema,omitempty"` + Name string `json:"name" minLength:"1" maxLength:"200"` + Description string `json:"description" minLength:"1" maxLength:"100"` + Status model.Status `json:"status,omitempty" minLength:"1"` + Repository model.Repository `json:"repository,omitempty"` + Version string `json:"version"` + WebsiteURL string `json:"websiteUrl,omitempty"` + Packages []model.Package `json:"packages,omitempty"` + Remotes []model.Transport `json:"remotes,omitempty"` + Meta *ServerMeta `json:"_meta,omitempty"` } // Metadata represents pagination metadata @@ -46,9 +47,16 @@ type Metadata struct { Count int `json:"count"` } -func (s *ServerJSON) GetID() string { +func (s *ServerJSON) GetServerID() string { if s.Meta != nil && s.Meta.Official != nil { - return s.Meta.Official.ID + return s.Meta.Official.ServerID + } + return "" +} + +func (s *ServerJSON) GetVersionID() string { + if s.Meta != nil && s.Meta.Official != nil { + return s.Meta.Official.VersionID } return "" } diff --git a/pkg/model/types.go b/pkg/model/types.go index bcb3baf..b30d0ff 100644 --- a/pkg/model/types.go +++ b/pkg/model/types.go @@ -19,18 +19,18 @@ type Transport struct { // Package represents a package configuration type Package struct { // RegistryType indicates how to download packages (e.g., "npm", "pypi", "oci", "mcpb") - RegistryType string `json:"registry_type" minLength:"1"` + RegistryType string `json:"registryType" minLength:"1"` // RegistryBaseURL is the base URL of the package registry - RegistryBaseURL string `json:"registry_base_url,omitempty"` + RegistryBaseURL string `json:"registryBaseUrl,omitempty"` // Identifier is the package identifier - either a package name (for registries) or URL (for direct downloads) Identifier string `json:"identifier" minLength:"1"` Version string `json:"version" minLength:"1"` - FileSHA256 string `json:"file_sha256,omitempty"` - RunTimeHint string `json:"runtime_hint,omitempty"` + FileSHA256 string `json:"fileSha256,omitempty"` + RunTimeHint string `json:"runtimeHint,omitempty"` Transport Transport `json:"transport,omitempty"` - RuntimeArguments []Argument `json:"runtime_arguments,omitempty"` - PackageArguments []Argument `json:"package_arguments,omitempty"` - EnvironmentVariables []KeyValueInput `json:"environment_variables,omitempty"` + RuntimeArguments []Argument `json:"runtimeArguments,omitempty"` + PackageArguments []Argument `json:"packageArguments,omitempty"` + EnvironmentVariables []KeyValueInput `json:"environmentVariables,omitempty"` } // Repository represents a source code repository as defined in the spec @@ -54,10 +54,10 @@ const ( // Input represents a configuration input type Input struct { Description string `json:"description,omitempty"` - IsRequired bool `json:"is_required,omitempty"` + IsRequired bool `json:"isRequired,omitempty"` Format Format `json:"format,omitempty"` Value string `json:"value,omitempty"` - IsSecret bool `json:"is_secret,omitempty"` + IsSecret bool `json:"isSecret,omitempty"` Default string `json:"default,omitempty"` Choices []string `json:"choices,omitempty"` } @@ -87,6 +87,6 @@ type Argument struct { InputWithVariables `json:",inline"` Type ArgumentType `json:"type"` Name string `json:"name,omitempty"` - IsRepeated bool `json:"is_repeated,omitempty"` - ValueHint string `json:"value_hint,omitempty"` + IsRepeated bool `json:"isRepeated,omitempty"` + ValueHint string `json:"valueHint,omitempty"` } diff --git a/scripts/test_publish.sh b/scripts/test_publish.sh index 68cfb28..cb89559 100755 --- a/scripts/test_publish.sh +++ b/scripts/test_publish.sh @@ -89,35 +89,38 @@ cat > "$PAYLOAD_FILE" << EOF "version": "1.0.$(date +%s)", "packages": [ { - "package_type": "javascript", - "registry_name": "npm", + "registryType": "npm", + "registryBaseUrl": "https://registry.npmjs.org", "identifier": "test-mcp-server", "version": "1.0.$(date +%s)", - "runtime_hint": "node", - "runtime_arguments": [ + "runtimeHint": "node", + "transport": { + "type": "stdio" + }, + "runtimeArguments": [ { "type": "positional", "name": "config", "description": "Configuration file path", "format": "file_path", - "is_required": false, + "isRequired": false, "default": "./config.json" } ], - "environment_variables": [ + "environmentVariables": [ { "name": "PORT", "description": "Port to run the server on", "format": "number", - "is_required": false, + "isRequired": false, "default": "3000" }, { "name": "API_KEY", "description": "API key for external service", "format": "string", - "is_required": true, - "is_secret": true + "isRequired": true, + "isSecret": true } ] } diff --git a/tests/integration/README.md b/tests/integration/README.md index 63d6c1c..ea77626 100644 --- a/tests/integration/README.md +++ b/tests/integration/README.md @@ -5,7 +5,7 @@ This directory contains an end-to-end test for publishing to the registry. ## What the Test Covers 1. **Publisher Tool**: Tests the `publisher` CLI that publishes metadata to the registry -2. **Registry API**: Validates the `/v0/publish` and `/v0/servers/{id}` endpoints work correctly +2. **Registry API**: Validates the `/v0/publish` and `/v0/servers/{server_id}` endpoints work correctly 3. **Example Validation**: Ensures all example JSON in `docs/reference/server-json/generic-server-json.md` is valid and can be published 4. **Data Consistency**: Verifies published data matches what's retrieved from the registry diff --git a/tests/integration/main.go b/tests/integration/main.go index 994d35f..6395757 100644 --- a/tests/integration/main.go +++ b/tests/integration/main.go @@ -224,9 +224,9 @@ func findServerIDByName(serverName string) (string, error) { var foundServers []string for _, server := range serverList.Servers { if server.Name == serverName { - foundServers = append(foundServers, fmt.Sprintf("ID:%s IsLatest:%t", server.Meta.Official.ID, server.Meta.Official.IsLatest)) + foundServers = append(foundServers, fmt.Sprintf("ServerID:%s VersionID:%s IsLatest:%t", server.Meta.Official.ServerID, server.Meta.Official.VersionID, server.Meta.Official.IsLatest)) if server.Meta.Official.IsLatest { - return server.Meta.Official.ID, nil + return server.Meta.Official.ServerID, nil } } } diff --git a/tools/validate-examples/main.go b/tools/validate-examples/main.go index 7ab71d9..7f2ab51 100644 --- a/tools/validate-examples/main.go +++ b/tools/validate-examples/main.go @@ -194,7 +194,7 @@ func compileSchema(path string) (*jsonschema.Schema, error) { } // Add the base schema to the compiler with the expected URL - if err := compiler.AddResource("https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", bytes.NewReader(baseData)); err != nil { + if err := compiler.AddResource("https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", bytes.NewReader(baseData)); err != nil { return nil, fmt.Errorf("failed to add base schema resource: %w", err) } } diff --git a/tools/validate-schemas/main.go b/tools/validate-schemas/main.go index ae1e556..16aff9a 100644 --- a/tools/validate-schemas/main.go +++ b/tools/validate-schemas/main.go @@ -80,7 +80,7 @@ func validateSchema(path string) error { } // Add the base schema to the compiler with the expected URL - if err := compiler.AddResource("https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", bytes.NewReader(baseData)); err != nil { + if err := compiler.AddResource("https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", bytes.NewReader(baseData)); err != nil { return fmt.Errorf("failed to add base schema resource: %w", err) } }