Summary
The composite tools guide documents the following template paths for elicitation step results:
| Documented path |
Description |
{{.steps.id.action}} |
Elicitation action (accept/decline/cancel) |
{{.steps.id.content}} |
Elicitation response content |
These paths resolve to <no value> at runtime. The actual working paths are:
| Correct path |
Description |
{{.steps.id.output.action}} |
Elicitation action (accept/decline/cancel) |
{{.steps.id.output.content}} |
Elicitation response content |
The action and content are stored inside the step's output map, consistent with how tool step results are accessed (.steps.id.output.field).
Impact
Any composite tool using a condition like {{eq .steps.approval.action "accept"}} silently evaluates to false, causing conditional steps to always be skipped — even when the user accepts the elicitation.
Verified behavior
Tested by adding a debug output field:
{{.steps.approval.action}} → <no value>
{{.steps.approval.output.action}} → accept
The same comment in the source code (pkg/vmcp/composer/composer.go lines 87-92) also has the incorrect paths.
Related
Summary
The composite tools guide documents the following template paths for elicitation step results:
{{.steps.id.action}}{{.steps.id.content}}These paths resolve to
<no value>at runtime. The actual working paths are:{{.steps.id.output.action}}{{.steps.id.output.content}}The action and content are stored inside the step's
outputmap, consistent with how tool step results are accessed (.steps.id.output.field).Impact
Any composite tool using a condition like
{{eq .steps.approval.action "accept"}}silently evaluates to false, causing conditional steps to always be skipped — even when the user accepts the elicitation.Verified behavior
Tested by adding a debug output field:
{{.steps.approval.action}}→<no value>{{.steps.approval.output.action}}→acceptThe same comment in the source code (
pkg/vmcp/composer/composer.golines 87-92) also has the incorrect paths.Related