@leanmcp/elicitation
Structured user input collection for LeanMCP tools using the MCP elicitation protocol. The@Elicitation decorator automatically intercepts tool calls to request missing required parameters from users.
Features
@Elicitation Decorator
Automatically collect missing user inputs before tool execution
Fluent Builder API
Programmatic form creation with
ElicitationFormBuilderMultiple Strategies
Form and multi-step elicitation strategies
Built-in Validation
min/max, pattern matching, custom validators
Installation
Quick Start
Simple Form Elicitation
How It Works
- Client calls tool with missing required fields
- Decorator intercepts and checks for missing fields
- Elicitation request returned with form definition
- Client displays form to collect user input
- Client calls tool again with complete arguments
- Method executes normally
Fluent Builder API
For more complex forms, useElicitationFormBuilder:
Builder Methods
| Method | Description |
|---|---|
title(string) | Set form title |
description(string) | Set form description |
condition(fn) | Set condition for elicitation |
addTextField(name, label, opts?) | Add text input |
addTextAreaField(name, label, opts?) | Add textarea |
addNumberField(name, label, opts?) | Add number input |
addBooleanField(name, label, opts?) | Add checkbox |
addSelectField(name, label, options, opts?) | Add dropdown |
addMultiSelectField(name, label, options, opts?) | Add multi-select |
addEmailField(name, label, opts?) | Add email input |
addUrlField(name, label, opts?) | Add URL input |
addDateField(name, label, opts?) | Add date picker |
addCustomField(field) | Add custom field |
build() | Build final config |
Conditional Elicitation
Only ask for inputs when needed:Multi-Step Elicitation
Break input collection into sequential steps:Field Types
| Type | Description |
|---|---|
text | Single-line text input |
textarea | Multi-line text area |
number | Numeric input |
boolean | Checkbox |
select | Dropdown (single choice) |
multiselect | Multi-select |
email | Email input |
url | URL input |
date | Date picker |
Validation
Built-in Validation
Using ValidationBuilder
Elicitation Flow
Request/Response Cycle
First Call (Missing Fields):API Reference
ElicitationConfig
ElicitationField
FieldValidation
Best Practices
Use Conditional Elicitation
Use Conditional Elicitation
Only ask when truly needed using the
condition option:Provide Sensible Defaults
Provide Sensible Defaults
Reduce user input burden with
defaultValue:Use Builder for Complex Forms
Use Builder for Complex Forms
The fluent API is more maintainable:
Add Helpful Descriptions
Add Helpful Descriptions
Use
helpText and placeholder to guide users:Related Packages
- @leanmcp/core - Core decorators and server functionality
- @leanmcp/auth - Authentication decorators and providers
- @leanmcp/cli - CLI tool for creating new projects