arcade-mcp/schemas/preview/tool_definition.schema.jsonc
Sam Partee 7f3abfd1f9
Tool SDK, Schemas (#2)
Co-authored-by: Nate Barbettini <nathanaelb@gmail.com>
2024-07-14 23:37:46 -07:00

198 lines
4.8 KiB
Text

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"primitives": {
// All supported primitive data types
"type": "string",
"enum": [
"string",
"integer",
"float",
"boolean",
"json"
]
},
"value_schema": {
// Represents a value schema (e.g. function input parameter)
"type": "object",
"properties": {
"type": {
"$ref": "#/$defs/primitives"
}
},
"required": [
"type"
],
"additionalProperties": false,
"if": {
"properties": {
"type": {
"const": "string"
}
}
},
"then": {
// String values can optionally be constrained to a known list
"properties": {
"enum": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
},
"type": "object",
"properties": {
"$schema": {
// Explicitly allow JSON-Schema to be referenced (due to additionalProperties: false)
"type": "string",
"format": "uri"
},
"name": {
"type": "string",
"description": "The tool name"
},
"description": {
"type": "string",
"description": "A human-readable description of the tool and when to use it"
},
"version": {
"type": "string",
"pattern": "^[a-f0-9]{7,40}$", // SHA version pattern (7-40 hexadecimal characters)
"description": "An identifier for this version of the tool"
},
"input": {
"type": "object",
"properties": {
"parameters": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"name": {
"description": "The human-readable name of this parameter.",
"type": "string"
},
"required": {
"description": "Whether this parameter is required (true) or optional (false).",
"type": "boolean"
},
"description": {
"description": "A descriptive, human-readable explanation of the parameter.",
"type": "string"
},
"schema": {
"$ref": "#/$defs/value_schema"
},
"inferrable": {
"type": "boolean",
"description": "Whether a value for this parameter can be inferred by a model. Defaults to `true`.",
"default": true
}
},
"required": [
"name",
"required",
"schema"
],
"additionalProperties": false
}
}
},
"required": [
"parameters"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"available_modes": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"enum": [
"value",
"error",
"null",
"artifact",
"requires_authorization"
]
}
},
"value": {
"type": "object",
"properties": {
"description": {
"type": "string"
},
"schema": {
"$ref": "#/$defs/value_schema"
}
},
"required": [
"schema"
],
"additionalProperties": false
}
},
"required": [
"available_modes"
],
"additionalProperties": false
},
"requirements": {
"type": "object",
"properties": {
"authorization": {
"oneOf": [
{
"type": "string",
"enum": [
"none",
"token"
]
},
{
"type": "object",
"properties": {
"oauth2": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"scope": {
"type": "string"
}
},
"required": [
"url"
],
"additionalProperties": false
}
},
"required": [
"oauth2"
],
"additionalProperties": false
}
]
}
}
}
},
"required": [
"name",
"version",
"input",
"output"
],
"additionalProperties": false
}