Currently one needs to do something like:
server.tool('elicit_inputs', 'Elicitation test tool', {}, async (_request, extra) => {
const result = await server.server.elicitInput(
{
message: 'Please provide inputs for the following fields:',
requestedSchema: ...
},
{
relatedRequestId: extra.requestId,
},
)
...
})
I think we should add a zod-typed elicitInput method to tool callback extras + McpServer that then calls the low-level server's elicitInput (related to #662):
// Tool-related elicitation:
server.tool('elicit_inputs', 'Elicitation test tool', {}, async (_request, extra) => {
const result = await extra.elicitInput(
'Please provide inputs for the following fields:',
z.object(...))
...
})
// Non-tool-related elicitation
setInterval(async () => {
const {action, content} = await server.elicitInput('It has been an hour. Wanna post something?', z.object(....), {timeout: 30_000});
if (action == 'accept) ...
}, 3_600_000);
// Note: some connections might need help to stay alive.
setInterval(() => server.ping(), 5_000);
Currently one needs to do something like:
I think we should add a zod-typed elicitInput method to tool callback extras + McpServer that then calls the low-level server's elicitInput (related to #662):