MCP server entry (v1)

mcp-server-entry.v1.schema.json

Overview

The common entry core plus an embedded, verbatim, valid server.json document, validated against schemas/vendor/server.schema.json (internal project documentation Section 3.5.4). All GA4GH additions live inside server._meta['org.ga4gh/ai-registry'], the upstream schema's own sanctioned extension point, so the embedded server document remains lift-out-able: stripping that one key MUST leave a valid, unmodified server.json publishable to registry.modelcontextprotocol.io. server.packages[] and server.remotes[] already cover any externally hosted distribution mechanism (an npm/PyPI/OCI/NuGet registry package, a direct-download URL, or a remote streamable-http/SSE endpoint), so this schema adds no separate hosting field.

Full specification: spec/mcp-server-card.md

This schema extends entry-core.v1.schema.json via allOf: every entry-core field is also required or available on this entry type, in addition to the fields below. This entry type additionally requires: server, ga4gh_standards. Of those, ga4gh_standards is an entry-core field promoted from optional to required for this entry type, without redeclaring its shape. No properties beyond entry-core's and those listed below are permitted on this entry type.

Properties

  • typestringoptional

    Always "mcp-server" for entries of this type.

    • Fixed value: "mcp-server"
  • serverobject (embedded external schema + extension)required

    The official MCP Registry server.json schema, vendored verbatim (not rendered here). This entry embeds a full, valid server.json document; GA4GH's own additions live only inside its _meta['org.ga4gh/ai-registry'] extension point, shown below. View server.schema.json on the repository ↗

    Additional fields beyond those listed here are permitted.

    • _metaobjectrequired

      Additional fields beyond those listed here are permitted.

      • org.ga4gh/ai-registryobjectrequired

        The sole GA4GH extension point inside the embedded server.json document (internal project documentation Section 3.5.4). Every GA4GH addition lives here, never as a sibling key on the server document itself.

        Additional fields beyond those listed here are permitted.

        • ga4gh_standardsarray of stringrequired

          Which GA4GH API specification(s) this server implements, and at what version, e.g. "trs@2.0.1". A bare kebab-case identifier with an optional @version suffix whose version part starts with a digit, so "trs@v2.0.1" is not a second spelling of "trs@2.0.1". This is the precise implementation claim; the common core's ga4gh_standards[] is the coarse, version-free browse facet. scripts/validate.ts enforces that stripping the @version suffix from every item here yields a subset of the common core array.

          • Minimum items: 1
          • Items must be unique
        • safety_classificationarray of objectoptional

          Same shape as the common core's safety_classification[] (internal project documentation Section 3.3).

          Same shape as entry-core's SafetyClassification definition, shown inline below.

          • schemestringrequired

            The issuing scheme. Closed enumeration, backed by schemas/vocab/safety-schemes.json; extensible by adding a value, never by editing an existing one's meaning.

            • Allowed values: "ga4gh-gase", "ga4gh-agent-runtime-risk"
          • levelstringrequired

            The level, in the issuing scheme's own notation: e.g. "GASL-2" or "GASL-3E" for ga4gh-gase; "0" through "4" for ga4gh-agent-runtime-risk. Never normalised or cross-mapped to the other scheme.

            • Length: 1–unbounded characters
          • certifying_bodystringoptional

            Who issued or performed the certification, if known.

          • evaluation_datestringoptional

            When the classification was evaluated.

            • Format: date
          • valid_untilstringoptional

            When the classification expires, if it does.

            • Format: date
          • evidence_uristringoptional

            Link to the certification record or evaluation report.

            • Format: uri
          • sourcestringrequired

            How this classification entered the registry.

            • Allowed values: "submitter-attested", "maintainer-verified", "synced-from-endpoint"
        • duoarray of stringoptional

          Optional Data Use Ontology / consent metadata associated with data this server exposes.

        • protocol_erastringoptional

          Optional, submitter-asserted: which MCP protocol era (2026-07-28 revision) this server supports -- "legacy" (pre-2026-07-28 stateful sessions only), "modern" (the stateless, per-request-versioned era only), or "dual" (both). A GA4GH addition, not an upstream field: confirmed by direct comparison against the live registry.modelcontextprotocol.io server.schema.json (2025-09-16, the same version vendored at schemas/vendor/server.schema.json) that the official MCP Registry spec carries no equivalent field as of this property's addition, so this does not duplicate or diverge from an upstream mechanism.

          • Allowed values: "legacy", "modern", "dual"

Raw schema

View raw schema JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://registry.biocommons.ai/schemas/mcp-server-entry.v1.schema.json",
  "x-ga4gh-schema-revision": "1.1.1",
  "title": "GA4GH AI Registry: MCP server entry (v1)",
  "description": "The common entry core plus an embedded, verbatim, valid server.json document, validated against schemas/vendor/server.schema.json (internal project documentation Section 3.5.4). All GA4GH additions live inside server._meta['org.ga4gh/ai-registry'], the upstream schema's own sanctioned extension point, so the embedded server document remains lift-out-able: stripping that one key MUST leave a valid, unmodified server.json publishable to registry.modelcontextprotocol.io. server.packages[] and server.remotes[] already cover any externally hosted distribution mechanism (an npm/PyPI/OCI/NuGet registry package, a direct-download URL, or a remote streamable-http/SSE endpoint), so this schema adds no separate hosting field.",
  "allOf": [
    {
      "$ref": "entry-core.v1.schema.json"
    },
    {
      "type": "object",
      "properties": {
        "type": {
          "const": "mcp-server"
        },
        "server": {
          "allOf": [
            {
              "$ref": "vendor/server.schema.json#/definitions/ServerDetail"
            },
            {
              "type": "object",
              "required": [
                "_meta"
              ],
              "properties": {
                "_meta": {
                  "type": "object",
                  "required": [
                    "org.ga4gh/ai-registry"
                  ],
                  "properties": {
                    "org.ga4gh/ai-registry": {
                      "type": "object",
                      "description": "The sole GA4GH extension point inside the embedded server.json document (internal project documentation Section 3.5.4). Every GA4GH addition lives here, never as a sibling key on the server document itself.",
                      "required": [
                        "ga4gh_standards"
                      ],
                      "properties": {
                        "ga4gh_standards": {
                          "type": "array",
                          "description": "Which GA4GH API specification(s) this server implements, and at what version, e.g. \"trs@2.0.1\". A bare kebab-case identifier with an optional @version suffix whose version part starts with a digit, so \"trs@v2.0.1\" is not a second spelling of \"trs@2.0.1\". This is the precise implementation claim; the common core's ga4gh_standards[] is the coarse, version-free browse facet. scripts/validate.ts enforces that stripping the @version suffix from every item here yields a subset of the common core array.",
                          "items": {
                            "type": "string",
                            "pattern": "^[a-z][a-z0-9-]*(@[0-9][0-9A-Za-z.-]*)?$"
                          },
                          "minItems": 1,
                          "uniqueItems": true
                        },
                        "safety_classification": {
                          "type": "array",
                          "description": "Same shape as the common core's safety_classification[] (internal project documentation Section 3.3).",
                          "items": {
                            "$ref": "entry-core.v1.schema.json#/$defs/SafetyClassification"
                          }
                        },
                        "duo": {
                          "type": "array",
                          "description": "Optional Data Use Ontology / consent metadata associated with data this server exposes.",
                          "items": {
                            "type": "string"
                          }
                        },
                        "protocol_era": {
                          "type": "string",
                          "enum": [
                            "legacy",
                            "modern",
                            "dual"
                          ],
                          "description": "Optional, submitter-asserted: which MCP protocol era (2026-07-28 revision) this server supports -- \"legacy\" (pre-2026-07-28 stateful sessions only), \"modern\" (the stateless, per-request-versioned era only), or \"dual\" (both). A GA4GH addition, not an upstream field: confirmed by direct comparison against the live registry.modelcontextprotocol.io server.schema.json (2025-09-16, the same version vendored at schemas/vendor/server.schema.json) that the official MCP Registry spec carries no equivalent field as of this property's addition, so this does not duplicate or diverge from an upstream mechanism."
                        }
                      }
                    }
                  }
                }
              }
            }
          ]
        }
      },
      "required": [
        "server",
        "ga4gh_standards"
      ]
    }
  ],
  "unevaluatedProperties": false
}