{
  "schema": "hm.mcp-trust.checks.v1",
  "ruleset": "2026-07-21.1",
  "updatedAt": "2026-07-21",
  "license": "CC-BY-4.0",
  "purpose": "Machine-readable catalog for deterministic structural checks performed by H/M MCP Trust on user-supplied declarations.",
  "decisionModel": {
    "review-required": "At least one critical or high structural observation exists.",
    "incomplete-evidence": "No critical or high observation exists, but medium observations or uncovered dimensions remain.",
    "contract-consistent": "No listed structural conflict was observed in the supplied declarations. This is not a security verdict."
  },
  "inputs": [
    { "id": "server", "format": "MCP Registry server.json-compatible object", "required": true },
    { "id": "protectedResource", "format": "RFC 9728 OAuth Protected Resource Metadata", "required": false },
    { "id": "authorizationServer", "format": "RFC 8414 or compatible authorization server metadata", "required": false }
  ],
  "dimensions": ["identity", "distribution", "transport", "authorization", "secrets"],
  "checks": [
    { "rule": "server-name-missing", "dimension": "identity", "severity": "high", "standard": "MCP Registry server.json" },
    { "rule": "server-name-format", "dimension": "identity", "severity": "medium", "standard": "MCP Registry server.json" },
    { "rule": "github-namespace-repository-mismatch", "dimension": "identity", "severity": "high", "standard": "MCP Registry ownership model" },
    { "rule": "namespace-endpoint-domain-mismatch", "dimension": "identity", "severity": "medium", "standard": "MCP Registry ownership model" },
    { "rule": "repository-missing", "dimension": "distribution", "severity": "medium", "standard": "MCP Registry server.json" },
    { "rule": "repository-url-missing", "dimension": "distribution", "severity": "medium", "standard": "MCP Registry server.json" },
    { "rule": "repository-source-missing", "dimension": "distribution", "severity": "medium", "standard": "MCP Registry server.json" },
    { "rule": "server-version-missing", "dimension": "distribution", "severity": "high", "standard": "MCP Registry server.json" },
    { "rule": "server-version-format", "dimension": "distribution", "severity": "medium", "standard": "MCP Registry server.json" },
    { "rule": "server-schema-missing", "dimension": "distribution", "severity": "medium", "standard": "MCP Registry server.json" },
    { "rule": "package-version-missing", "dimension": "distribution", "severity": "high", "standard": "MCP Registry server.json" },
    { "rule": "package-version-drift", "dimension": "distribution", "severity": "medium", "standard": "MCP Registry server.json" },
    { "rule": "oci-artifact-not-digest-pinned", "dimension": "distribution", "severity": "medium", "standard": "SLSA provenance" },
    { "rule": "server-entrypoint-missing", "dimension": "transport", "severity": "high", "standard": "MCP Registry server.json" },
    { "rule": "package-transport-missing", "dimension": "transport", "severity": "high", "standard": "MCP Registry server.json" },
    { "rule": "remote-type-missing", "dimension": "transport", "severity": "high", "standard": "MCP Registry server.json" },
    { "rule": "remote-type-unrecognized", "dimension": "transport", "severity": "medium", "standard": "MCP specification" },
    { "rule": "local-process-entrypoint", "dimension": "transport", "severity": "info", "standard": "MCP security best practices" },
    { "rulePattern": "*-url-invalid", "dimension": "transport", "severity": "high", "standard": "URI syntax" },
    { "rulePattern": "*-url-not-https", "dimension": "transport", "severity": "high", "standard": "MCP security best practices" },
    { "rulePattern": "*-url-private-network", "dimension": "transport", "severity": "high", "standard": "MCP security best practices" },
    { "rulePattern": "*-url-loopback", "dimension": "transport", "severity": "high", "standard": "MCP security best practices" },
    { "rulePattern": "*-url-fragment", "dimension": "transport", "severity": "medium", "standard": "URI syntax" },
    { "rule": "authorization-mode-unknown", "dimension": "authorization", "severity": "medium", "standard": "MCP authorization specification" },
    { "rule": "public-auth-metadata-conflict", "dimension": "authorization", "severity": "medium", "standard": "MCP authorization specification" },
    { "rule": "protected-resource-metadata-missing", "dimension": "authorization", "severity": "high", "standard": "RFC 9728 / MCP authorization" },
    { "rule": "protected-resource-id-missing", "dimension": "authorization", "severity": "high", "standard": "RFC 9728" },
    { "rule": "protected-resource-id-mismatch", "dimension": "authorization", "severity": "high", "standard": "RFC 9728 / MCP authorization" },
    { "rule": "authorization-servers-missing", "dimension": "authorization", "severity": "high", "standard": "RFC 9728 / MCP authorization" },
    { "rule": "authorization-issuer-not-declared", "dimension": "authorization", "severity": "high", "standard": "RFC 9728 / RFC 8414" },
    { "rule": "authorization-server-metadata-not-provided", "dimension": "authorization", "severity": "medium", "standard": "RFC 8414 / MCP authorization" },
    { "rule": "authorization-issuer-missing", "dimension": "authorization", "severity": "high", "standard": "RFC 8414" },
    { "rule": "authorization-endpoint-missing", "dimension": "authorization", "severity": "high", "standard": "RFC 8414 / MCP authorization" },
    { "rule": "token-endpoint-missing", "dimension": "authorization", "severity": "high", "standard": "RFC 8414 / MCP authorization" },
    { "rule": "pkce-s256-not-declared", "dimension": "authorization", "severity": "high", "standard": "MCP authorization specification" },
    { "rule": "bearer-token-non-header-method", "dimension": "authorization", "severity": "high", "standard": "OAuth security best current practice" },
    { "rule": "broad-resource-scope", "dimension": "authorization", "severity": "medium", "standard": "MCP scope minimization" },
    { "rule": "broad-authorization-scope", "dimension": "authorization", "severity": "medium", "standard": "MCP scope minimization" },
    { "rule": "authorization-protected-resource-mismatch", "dimension": "authorization", "severity": "high", "standard": "RFC 9728" },
    { "rule": "signed-resource-metadata-unverified", "dimension": "authorization", "severity": "info", "standard": "RFC 9728" },
    { "rule": "secret-variable-not-marked", "dimension": "secrets", "severity": "high", "standard": "MCP Registry server.json" },
    { "rule": "secret-default-present", "dimension": "secrets", "severity": "critical", "standard": "MCP Registry server.json" },
    { "rule": "credential-default-present", "dimension": "secrets", "severity": "critical", "standard": "MCP security best practices" },
    { "rule": "credential-argument-present", "dimension": "secrets", "severity": "critical", "standard": "MCP security best practices" },
    { "rule": "secret-pattern-in-argument", "dimension": "secrets", "severity": "critical", "standard": "MCP security best practices" },
    { "rule": "credential-field-present", "dimension": "secrets", "severity": "critical", "standard": "MCP security best practices" },
    { "rule": "secret-pattern-present", "dimension": "secrets", "severity": "critical", "standard": "MCP security best practices" },
    { "rulePattern": "*-url-credentials", "dimension": "secrets", "severity": "critical", "standard": "MCP security best practices" },
    { "rulePattern": "*-url-secret-query", "dimension": "secrets", "severity": "critical", "standard": "MCP security best practices" }
  ],
  "privacy": {
    "documentsUploaded": false,
    "rawValuesIncludedInExport": false,
    "urlsIncludedInExport": false,
    "serverNamesIncludedInExport": false,
    "fileNamesIncludedInExport": false,
    "secretValuesIncludedInExport": false,
    "metricPayloadIncludesInputData": false,
    "syntheticActivityPresentedAsReal": false
  },
  "limitations": {
    "urlsFetched": false,
    "schemaValidationPerformed": false,
    "registryOwnershipVerified": false,
    "packageContentsInspected": false,
    "repositoryContentsInspected": false,
    "signaturesVerified": false,
    "runtimeBehaviorObserved": false,
    "securityVerdictProduced": false,
    "toolExecutionPerformed": false
  },
  "sources": [
    "https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices",
    "https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization",
    "https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/generic-server-json.md",
    "https://datatracker.ietf.org/doc/html/rfc9728",
    "https://slsa.dev/spec/v1.1/provenance"
  ]
}
