#[non_exhaustive]pub struct ToolSchema {
pub name: String,
pub description: String,
pub params: Vec<ParamSchema>,
pub examples: Vec<Example>,
pub map_positionals: bool,
pub subcommands: Vec<ToolSchema>,
pub aliases: Vec<String>,
pub owns_output: bool,
}Expand description
Schema describing a tool’s interface.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.name: StringTool name.
description: StringShort description.
params: Vec<ParamSchema>Parameter definitions.
examples: Vec<Example>Usage examples.
map_positionals: boolMap remaining positional args to named params by schema order. Only for MCP/external tools that expect named JSON params. Builtins handle their own positionals and should leave this false.
subcommands: Vec<ToolSchema>Child schemas for subcommand-aware tools (kj context list, …).
Empty for flat tools (cat, grep, ls) — they take the flat binding
path. When non-empty, the kernel walks leading positionals to pick the
active leaf and binds flags against that leaf’s params (see
select_leaf in the kernel).
skip_serializing_if keeps the wire compact for the many flat tools
(no "subcommands":[] noise); default is then required so a flat
tool’s payload (key absent) deserializes back to empty.
aliases: Vec<String>Command-level aliases (ls → list, rm → remove), matched when
routing a positional to a child. Distinct from ParamSchema::aliases,
which name flags.
owns_output: boolThe tool renders its own output, including --json — the kernel
must not re-format its ExecResult through apply_output_format.
Default false: a tool returns typed crate::OutputData and the kernel
renders the requested format uniformly. Set true for tools with bespoke
JSON envelopes (e.g. an embedder’s kj): they consume --json
themselves and emit final bytes. See ToolSchema::with_owned_output.
Implementations§
Source§impl ToolSchema
impl ToolSchema
Sourcepub fn new(
name: impl Into<String>,
description: impl Into<String>,
) -> ToolSchema
pub fn new( name: impl Into<String>, description: impl Into<String>, ) -> ToolSchema
Create a new tool schema.
Sourcepub fn with_positional_mapping(self) -> ToolSchema
pub fn with_positional_mapping(self) -> ToolSchema
Enable positional->named parameter mapping for MCP/external tools.
Sourcepub fn param(self, param: ParamSchema) -> ToolSchema
pub fn param(self, param: ParamSchema) -> ToolSchema
Add a parameter to the schema.
Sourcepub fn example(
self,
description: impl Into<String>,
code: impl Into<String>,
) -> ToolSchema
pub fn example( self, description: impl Into<String>, code: impl Into<String>, ) -> ToolSchema
Add an example to the schema.
Sourcepub fn subcommand(self, child: ToolSchema) -> ToolSchema
pub fn subcommand(self, child: ToolSchema) -> ToolSchema
Add a child schema, making this a subcommand-aware tool.
Sourcepub fn with_command_aliases(
self,
aliases: impl IntoIterator<Item = impl Into<String>>,
) -> ToolSchema
pub fn with_command_aliases( self, aliases: impl IntoIterator<Item = impl Into<String>>, ) -> ToolSchema
Set command-level aliases (e.g. ls for a list subcommand). These
name the command, not its flags; flag aliases live on each
ParamSchema.
Sourcepub fn matches_command(&self, word: &str) -> bool
pub fn matches_command(&self, word: &str) -> bool
True if word names this command — its name or any of its
command-level aliases. Used when routing a positional to a child.
Sourcepub fn with_owned_output(self) -> ToolSchema
pub fn with_owned_output(self) -> ToolSchema
Declare that this tool renders its own output (including --json), so
the kernel won’t re-format its result.
Applies to the whole tree: every subcommand is marked too, and a json
param is advertised on each node that doesn’t already declare one.
Reflection skips json as the kernel-global output flag, so this
re-advertises it for tools that genuinely own it — closing the loop so
help <tool> <sub> lists --json where the tool actually handles it.
Trait Implementations§
Source§impl Clone for ToolSchema
impl Clone for ToolSchema
Source§fn clone(&self) -> ToolSchema
fn clone(&self) -> ToolSchema
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more