Implement flattened _meta format for server extensions (#331)
## Summary This PR implements the flattened `_meta` format for server extensions as discussed in #284, replacing the confusing wrapper format with a clean single-file approach. **Before (wrapper format):** ```json { "server": { "name": "my-server", "description": "..." }, "x-publisher": { "build_info": "..." }, "x-io.modelcontextprotocol.registry": { "id": "...", "published_at": "..." } } ``` **After (flattened format):** ```json { "name": "my-server", "description": "...", "_meta": { "publisher": { "build_info": "..." }, "io.modelcontextprotocol.registry": { "id": "...", "published_at": "..." } } } ``` ## Key Changes - **Flattened Format**: Single `ServerJSON` file with structured `_meta` field - **Better DX**: Publishers maintain one file instead of separate server.json + extensions.json - **MCP Compliance**: Uses standard `_meta` mechanism instead of `x-*` prefixes - **Simplified Database**: PostgreSQL now uses simple `id, value` table structure - **Type Safety**: Structured `ServerMeta` with known extension fields ## Database Migration Added migration `003_simplify_to_key_value.sql` that drops the complex relational structure and creates a simple key-value table. This significantly simplifies database management. ## Testing - All core tests passing (validators, service layer) - Schema validation working for all 10 examples - Seed data successfully migrated (396 entries) - Publishing functionality verified Fixes #284
This commit is contained in:
parent
be036a45ea
commit
218b0b422d
1 changed files with 19375 additions and 19670 deletions
|
|
@ -14,9 +14,9 @@ import (
|
|||
"regexp"
|
||||
"strings"
|
||||
|
||||
jsonschema "github.com/santhosh-tekuri/jsonschema/v5"
|
||||
"github.com/modelcontextprotocol/registry/pkg/model"
|
||||
"github.com/modelcontextprotocol/registry/internal/validators"
|
||||
apiv0 "github.com/modelcontextprotocol/registry/pkg/api/v0"
|
||||
jsonschema "github.com/santhosh-tekuri/jsonschema/v5"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
@ -129,26 +129,26 @@ func validateAgainstSchema(data any, schema *jsonschema.Schema, schemaName strin
|
|||
}
|
||||
|
||||
func validateWithObjectValidator(serverData any) bool {
|
||||
var serverDetail model.ServerJSON
|
||||
var serverDetail apiv0.ServerJSON
|
||||
serverDataBytes, err := json.Marshal(serverData)
|
||||
if err != nil {
|
||||
log.Printf(" Validating with Go Validator: ❌")
|
||||
log.Printf(" Error marshaling server data: %v", err)
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
if err := json.Unmarshal(serverDataBytes, &serverDetail); err != nil {
|
||||
log.Printf(" Validating with Go Validator: ❌")
|
||||
log.Printf(" Error unmarshaling to ServerDetail: %v", err)
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
if err := validators.ValidateServerJSON(&serverDetail); err != nil {
|
||||
log.Printf(" Validating with Go Validator: ❌")
|
||||
log.Printf(" Error: %v", err)
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
log.Printf(" Validating with Go Validator: ✅")
|
||||
return true
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue