Tool implements JsonSerializable
Definition for a tool the client can call.
Tags
Table of Contents
Interfaces
- JsonSerializable
Constants
- SUB_SCHEMA_KEYWORDS : mixed = ['additionalItems', 'additionalProperties', 'co...
- JSON Schema keywords whose value is a single sub-schema.
- SUB_SCHEMA_LIST_KEYWORDS : mixed = ['allOf', 'anyOf', 'oneOf', 'prefixItems']
- JSON Schema keywords whose value is a list of sub-schemas.
- SUB_SCHEMA_MAP_KEYWORDS : mixed = ['$defs', 'definitions', 'dependentSchemas', 'p...
- JSON Schema keywords whose value maps names to sub-schemas.
Properties
- $annotations : ToolAnnotations|null
- $description : string|null
- $icons : array<string|int, mixed>|null
- $inputSchema : ToolInputSchema
- $meta : array<string|int, mixed>|null
- $name : string
- $outputSchema : ToolOutputSchema|null
- $title : string|null
Methods
- __construct() : mixed
- fromArray() : self
- jsonSerialize() : stdClass}
- normalizeSchema() : array<string, mixed>
- Normalize a JSON Schema so that empty sub-schemas JSON-encode as `{}` rather than `[]`.
- normalizeSubSchema() : array<string, mixed>|stdClass
Constants
SUB_SCHEMA_KEYWORDS
JSON Schema keywords whose value is a single sub-schema.
private
mixed
SUB_SCHEMA_KEYWORDS
= ['additionalItems', 'additionalProperties', 'contains', 'else', 'if', 'not', 'propertyNames', 'then', 'unevaluatedItems', 'unevaluatedProperties']
SUB_SCHEMA_LIST_KEYWORDS
JSON Schema keywords whose value is a list of sub-schemas.
private
mixed
SUB_SCHEMA_LIST_KEYWORDS
= ['allOf', 'anyOf', 'oneOf', 'prefixItems']
SUB_SCHEMA_MAP_KEYWORDS
JSON Schema keywords whose value maps names to sub-schemas.
private
mixed
SUB_SCHEMA_MAP_KEYWORDS
= ['$defs', 'definitions', 'dependentSchemas', 'patternProperties', 'properties']
Properties
$annotations read-only
public
ToolAnnotations|null
$annotations
$description read-only
public
string|null
$description
$icons read-only
public
array<string|int, mixed>|null
$icons
= null
$inputSchema read-only
public
ToolInputSchema
$inputSchema
$meta read-only
public
array<string|int, mixed>|null
$meta
= null
$name read-only
public
string
$name
$outputSchema read-only
public
ToolOutputSchema|null
$outputSchema
$title read-only
public
string|null
$title
Methods
__construct()
public
__construct(string $name, string|null $title, ToolInputSchema $inputSchema, string|null $description, ToolAnnotations|null $annotations[, array<string|int, Icon>|null $icons = null ][, array<string, mixed>|null $meta = null ][, ToolOutputSchema|null $outputSchema = null ]) : mixed
Parameters
- $name : string
-
the name of the tool
- $title : string|null
-
Optional human-readable title for display in UI
- $inputSchema : ToolInputSchema
-
a JSON Schema object (as a PHP array) defining the expected 'arguments' for the tool
- $description : string|null
-
A human-readable description of the tool. This can be used by clients to improve the LLM's understanding of available tools. It can be thought of like a "hint" to the model.
- $annotations : ToolAnnotations|null
-
optional additional tool information
- $icons : array<string|int, Icon>|null = null
-
optional icons representing the tool
- $meta : array<string, mixed>|null = null
-
Optional metadata
- $outputSchema : ToolOutputSchema|null = null
-
Optional JSON Schema (as a PHP array) describing the tool's structuredContent. Unlike $inputSchema its root is unconstrained — it may describe an array, a primitive, or a composition.
fromArray()
public
static fromArray(ToolData $data) : self
Parameters
- $data : ToolData
Return values
selfjsonSerialize()
public
jsonSerialize() : stdClass}
Return values
stdClass}normalizeSchema()
Normalize a JSON Schema so that empty sub-schemas JSON-encode as `{}` rather than `[]`.
private
static normalizeSchema(array<string, mixed> $schema) : array<string, mixed>
Once JSON is decoded into associative arrays, PHP cannot tell the empty object }
from the empty array [] — both are []. Re-encoding then produces [], which is
invalid wherever a schema is expected (properties, items, additionalProperties,
…), and strict clients reject it. Every empty sub-schema is therefore replaced with a
\stdClass before serialization.
The walk is recursive and covers the schema keywords of draft-07 through 2020-12, so
nested object parameters, $defs, combinators, and outputSchema are all covered —
not only the top-level properties map.
Parameters
- $schema : array<string, mixed>
Return values
array<string, mixed>normalizeSubSchema()
private
static normalizeSubSchema(array<string, mixed> $schema) : array<string, mixed>|stdClass
Parameters
- $schema : array<string, mixed>