defineToolPlugin
Import: openclaw/plugin-sdk/tool-plugin
For plugins that only add agent tools. Keeps the source small, infers config
and tool-parameter types from TypeBox schemas, wraps plain return values in
the OpenClaw tool-result format, and exposes static metadata that
openclaw plugins build writes into the plugin manifest (contracts.tools,
configSchema).
configSchemais optional; omitting it uses a strict empty object schema (the generated manifest still includesconfigSchema).executereturns a plain string or JSON-serializable value; the helper wraps it as a text tool result withdetailsset to the original (unstringified) return value.outputSchemaoptionally describes that originaldetailsvalue for Code Mode and Tool Search. Catalog calls reject an invalid schema before execution and validate the final value before returning it.- For custom tool results,
openclaw/plugin-sdk/tool-resultsexportstextResultandjsonResult. - Tool names are static, so
openclaw plugins buildderivescontracts.toolsfrom the declared tools without hand-duplicated names. - Runtime loading stays strict: installed plugins still need
openclaw.plugin.jsonandpackage.jsonopenclaw.extensions. OpenClaw never executes plugin code to infer missing manifest data.
Input-dependent output schemas
The existingoutputSchema field supports action-specific Code Mode results
through the versioned x-openclaw-input-discriminator JSON Schema annotation.
Construct the union and mapping from the same local variants using standard
TypeBox APIs:
outputSchema in defineToolPlugin or api.registerTool.
Include success and non-throwing failure outcomes in each variant. Static metadata
preserves the annotation. Code Mode infers the selected return type; Tool Search
validates the actual and originally advertised operation results. Missing or
broad selectors retain a sound union. Reference-bearing schemas and declarations
that exceed existing bounds use the conservative umbrella contract. See
Input-dependent outputs for
version, hook, and validation behavior.