{ "$schema": "http://json-schema.org/draft-07/schema#", "$defs": { "primitives": { "description": "All supported primitive data types", "type": "string", "enum": ["string", "integer", "number", "boolean", "json"] }, "value_schema": { "type": "object", "description": "The schema of a value (e.g. function input parameter value)", "properties": { "val_type": { "oneOf": [{ "$ref": "#/$defs/primitives" }, { "type": "string", "enum": ["array"] }] }, "inner_val_type": { "description": "If the value type is a list, the type of the list values.", "oneOf": [{ "$ref": "#/$defs/primitives" }, { "type": "null" }] }, "enum": { "oneOf": [ { "type": "null" }, { "type": "array", "items": { "type": "string" } } ] } }, "required": ["val_type"], "additionalProperties": false, "if": { "properties": { "val_type": { "const": "array" } } }, "then": { "required": ["inner_val_type"] } } }, "type": "object", "properties": { "$schema": { "type": "string", "format": "uri" }, "name": { "type": "string", "description": "The tool name" }, "fully_qualified_name": { "type": "string", "description": "The tool's fully-qualified name" }, "description": { "type": "string", "description": "A human-readable description of the tool and when to use it" }, "toolkit": { "type": "object", "description": "The toolkit that contains the tool", "properties": { "name": { "type": "string", "description": "The name of the toolkit" }, "description": { "type": "string", "description": "A human-readable description of the toolkit" }, "version": { "type": "string", "description": "An identifier for this version of the toolkit" } }, "required": ["name", "version"], "additionalProperties": false }, "input": { "type": "object", "properties": { "parameters": { "type": "array", "minItems": 0, "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" }, "value_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", "value_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"] } }, "description": { "description": "A descriptive, human-readable explanation of the function's output.", "type": "string" }, "value_schema": { "$ref": "#/$defs/value_schema" } }, "required": ["available_modes"], "additionalProperties": false }, "requirements": { "type": "object", "properties": { "secrets": { "oneOf": [ { "type": "null" }, { "type": "array", "items": { "type": "object", "properties": { "key_id": { "type": "string" } }, "required": ["key_id"], "additionalProperties": false } } ] }, "authorization": { "oneOf": [ { "type": "null" }, { "type": "string", "enum": ["none", "token"] }, { "type": "object", "properties": { "provider_id": { "type": "string", "description": "The provider ID configured in Arcade that acts as an alias to well-known configuration." }, "provider_type": { "type": "string", "description": "The type of the authorization provider." }, "id": { "type": "string", "description": "A provider's unique identifier, allowing the tool to specify a specific authorization provider. Recommended for private tools only." }, "oauth2": { "type": "object", "properties": { "scopes": { "type": "array", "items": { "type": "string" } } }, "additionalProperties": false } }, "required": ["provider_type"], "additionalProperties": false } ] } }, "additionalProperties": false } }, "required": ["name", "fully_qualified_name", "toolkit", "input", "output"], "additionalProperties": false }