Draft v0.1 — published for review. Not final until approved; may change incompatibly before 1.0.

Isto Intents registry

registry.schema.json · raw JSON · JSON Schema 2020-12

The public list of intent holders, built from their descriptors and checked automatically (registry chapter §3, v0.2 draft).

$id: https://istointents.org/schemas/0.2/registry.schema.json

Fields#

fieldtyperequireddescription
specVersion"0.2"yes
type"registry"yes
idstring (uri, pattern ^https://)yes
createdcommon › timestampyes
updatedcommon › timestampyes
termsstring (uri, pattern ^https://)yes
licencestringyes
entriesarray of entryyes

Definitions#

nametypedescription
entryobjectone listed host
listedServerholder-descriptor › serverFieldsthe server as declared in the descriptor, plus what the registry observed
observedobjectthe registry's own statement; everything else in an entry is declared by its operator

entry

fieldtyperequireddescription
idstring (pattern ^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$)yesthe host
descriptorstring (uri, pattern ^https://[^/]+/\.well-known/isto-intents\.json$)yes
operatorholder-descriptor › operatoryes
serversarray of listedServeryes
listedAtcommon › timestampyes
descriptorCheckedAtcommon › timestampyes

listedServer

fieldtyperequireddescription
observedobservedyes

observed

fieldtyperequireddescription
status"active" | "unreachable" | "non-conformant" | "inactive" | "deprecated"yes
checkedAtcommon › timestampyes
lastOkAtcommon › timestamp
protocolVersionstringMCP protocol version the server answered with
serverNamestringserverInfo.name from initialize
toolsarray of stringthe intent_ tools the server listed
mcpRegistry"match" | "mismatch" | "absent"
problemstringwhy the last check failed, if it did

Examples#

Full schema#

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://istointents.org/schemas/0.2/registry.schema.json",
  "title": "Isto Intents registry",
  "description": "The public list of intent holders, built from their descriptors and checked automatically (registry chapter §3, v0.2 draft).",
  "type": "object",
  "required": [
    "specVersion",
    "type",
    "id",
    "created",
    "updated",
    "terms",
    "licence",
    "entries"
  ],
  "properties": {
    "specVersion": {
      "const": "0.2"
    },
    "type": {
      "const": "registry"
    },
    "id": {
      "type": "string",
      "format": "uri",
      "pattern": "^https://"
    },
    "created": {
      "$ref": "https://istointents.org/schemas/0.1/common.schema.json#/$defs/timestamp"
    },
    "updated": {
      "$ref": "https://istointents.org/schemas/0.1/common.schema.json#/$defs/timestamp"
    },
    "terms": {
      "type": "string",
      "format": "uri",
      "pattern": "^https://"
    },
    "licence": {
      "type": "string",
      "minLength": 3
    },
    "entries": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/entry"
      }
    }
  },
  "$defs": {
    "entry": {
      "type": "object",
      "description": "one listed host",
      "required": [
        "id",
        "descriptor",
        "operator",
        "servers",
        "listedAt",
        "descriptorCheckedAt"
      ],
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$",
          "description": "the host"
        },
        "descriptor": {
          "type": "string",
          "format": "uri",
          "pattern": "^https://[^/]+/\\.well-known/isto-intents\\.json$"
        },
        "operator": {
          "$ref": "holder-descriptor.schema.json#/$defs/operator"
        },
        "servers": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/listedServer"
          }
        },
        "listedAt": {
          "$ref": "https://istointents.org/schemas/0.1/common.schema.json#/$defs/timestamp"
        },
        "descriptorCheckedAt": {
          "$ref": "https://istointents.org/schemas/0.1/common.schema.json#/$defs/timestamp"
        }
      },
      "additionalProperties": false
    },
    "listedServer": {
      "description": "the server as declared in the descriptor, plus what the registry observed",
      "$ref": "holder-descriptor.schema.json#/$defs/serverFields",
      "required": [
        "observed"
      ],
      "properties": {
        "observed": {
          "$ref": "#/$defs/observed"
        }
      },
      "unevaluatedProperties": false
    },
    "observed": {
      "type": "object",
      "description": "the registry's own statement; everything else in an entry is declared by its operator",
      "required": [
        "status",
        "checkedAt"
      ],
      "properties": {
        "status": {
          "enum": [
            "active",
            "unreachable",
            "non-conformant",
            "inactive",
            "deprecated"
          ]
        },
        "checkedAt": {
          "$ref": "https://istointents.org/schemas/0.1/common.schema.json#/$defs/timestamp"
        },
        "lastOkAt": {
          "$ref": "https://istointents.org/schemas/0.1/common.schema.json#/$defs/timestamp"
        },
        "protocolVersion": {
          "type": "string",
          "description": "MCP protocol version the server answered with",
          "maxLength": 40
        },
        "serverName": {
          "type": "string",
          "description": "serverInfo.name from initialize",
          "maxLength": 120
        },
        "tools": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 64
          },
          "description": "the intent_ tools the server listed",
          "maxItems": 20
        },
        "mcpRegistry": {
          "enum": [
            "match",
            "mismatch",
            "absent"
          ]
        },
        "problem": {
          "type": "string",
          "maxLength": 300,
          "description": "why the last check failed, if it did"
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}