@@ -31,15 +31,20 @@ const MAX_POLL_ATTEMPTS = 600;
3131 *
3232 * @param {McpServer } server - The McpServer instance where the tool will be registered.
3333 */
34- export const registerTriggerElicitationRequestAsyncTool = ( server : McpServer ) => {
34+ export const registerTriggerElicitationRequestAsyncTool = (
35+ server : McpServer
36+ ) => {
3537 // Check client capabilities
3638 const clientCapabilities = server . server . getClientCapabilities ( ) || { } ;
3739
3840 // Client must support elicitation AND tasks.requests.elicitation
39- const clientSupportsElicitation = clientCapabilities . elicitation !== undefined ;
40- const clientTasksCapability = clientCapabilities . tasks as {
41- requests ?: { elicitation ?: { create ?: object } } ;
42- } | undefined ;
41+ const clientSupportsElicitation =
42+ clientCapabilities . elicitation !== undefined ;
43+ const clientTasksCapability = clientCapabilities . tasks as
44+ | {
45+ requests ?: { elicitation ?: { create ?: object } } ;
46+ }
47+ | undefined ;
4348 const clientSupportsAsyncElicitation =
4449 clientTasksCapability ?. requests ?. elicitation ?. create !== undefined ;
4550
@@ -56,7 +61,8 @@ export const registerTriggerElicitationRequestAsyncTool = (server: McpServer) =>
5661 task : {
5762 ttl : 600000 , // 10 minutes (user input may take a while)
5863 } ,
59- message : "Please provide inputs for the following fields (async task demo):" ,
64+ message :
65+ "Please provide inputs for the following fields (async task demo):" ,
6066 requestedSchema : {
6167 type : "object" as const ,
6268 properties : {
@@ -107,14 +113,18 @@ export const registerTriggerElicitationRequestAsyncTool = (server: McpServer) =>
107113 ) ;
108114
109115 // Check if client returned CreateTaskResult (has task object)
110- const isTaskResult = ' task' in elicitResponse && elicitResponse . task ;
116+ const isTaskResult = " task" in elicitResponse && elicitResponse . task ;
111117 if ( ! isTaskResult ) {
112118 // Client executed synchronously - return the direct response
113119 return {
114120 content : [
115121 {
116122 type : "text" ,
117- text : `[SYNC] Client executed synchronously:\n${ JSON . stringify ( elicitResponse , null , 2 ) } ` ,
123+ text : `[SYNC] Client executed synchronously:\n${ JSON . stringify (
124+ elicitResponse ,
125+ null ,
126+ 2
127+ ) } `,
118128 } ,
119129 ] ,
120130 } ;
@@ -145,19 +155,27 @@ export const registerTriggerElicitationRequestAsyncTool = (server: McpServer) =>
145155 method : "tasks/get" ,
146156 params : { taskId } ,
147157 } ,
148- z . object ( {
149- status : z . string ( ) ,
150- statusMessage : z . string ( ) . optional ( ) ,
151- } ) . passthrough ( )
158+ z
159+ . object ( {
160+ status : z . string ( ) ,
161+ statusMessage : z . string ( ) . optional ( ) ,
162+ } )
163+ . passthrough ( )
152164 ) ;
153165
154166 taskStatus = pollResult . status ;
155167 taskStatusMessage = pollResult . statusMessage ;
156168
157169 // Only log status changes or every 10 polls to avoid spam
158- if ( attempts === 1 || attempts % 10 === 0 || taskStatus !== "input_required" ) {
170+ if (
171+ attempts === 1 ||
172+ attempts % 10 === 0 ||
173+ taskStatus !== "input_required"
174+ ) {
159175 statusMessages . push (
160- `Poll ${ attempts } : ${ taskStatus } ${ taskStatusMessage ? ` - ${ taskStatusMessage } ` : "" } `
176+ `Poll ${ attempts } : ${ taskStatus } ${
177+ taskStatusMessage ? ` - ${ taskStatusMessage } ` : ""
178+ } `
161179 ) ;
162180 }
163181 }
@@ -168,7 +186,9 @@ export const registerTriggerElicitationRequestAsyncTool = (server: McpServer) =>
168186 content : [
169187 {
170188 type : "text" ,
171- text : `[TIMEOUT] Task timed out after ${ MAX_POLL_ATTEMPTS } poll attempts\n\nProgress:\n${ statusMessages . join ( "\n" ) } ` ,
189+ text : `[TIMEOUT] Task timed out after ${ MAX_POLL_ATTEMPTS } poll attempts\n\nProgress:\n${ statusMessages . join (
190+ "\n"
191+ ) } `,
172192 } ,
173193 ] ,
174194 } ;
@@ -180,7 +200,9 @@ export const registerTriggerElicitationRequestAsyncTool = (server: McpServer) =>
180200 content : [
181201 {
182202 type : "text" ,
183- text : `[${ taskStatus . toUpperCase ( ) } ] ${ taskStatusMessage || "No message" } \n\nProgress:\n${ statusMessages . join ( "\n" ) } ` ,
203+ text : `[${ taskStatus . toUpperCase ( ) } ] ${
204+ taskStatusMessage || "No message"
205+ } \n\nProgress:\n${ statusMessages . join ( "\n" ) } `,
184206 } ,
185207 ] ,
186208 } ;
@@ -207,8 +229,10 @@ export const registerTriggerElicitationRequestAsyncTool = (server: McpServer) =>
207229 const userData = result . content as Record < string , unknown > ;
208230 const lines = [ ] ;
209231 if ( userData . name ) lines . push ( `- Name: ${ userData . name } ` ) ;
210- if ( userData . favoriteColor ) lines . push ( `- Favorite Color: ${ userData . favoriteColor } ` ) ;
211- if ( userData . agreeToTerms !== undefined ) lines . push ( `- Agreed to terms: ${ userData . agreeToTerms } ` ) ;
232+ if ( userData . favoriteColor )
233+ lines . push ( `- Favorite Color: ${ userData . favoriteColor } ` ) ;
234+ if ( userData . agreeToTerms !== undefined )
235+ lines . push ( `- Agreed to terms: ${ userData . agreeToTerms } ` ) ;
212236
213237 content . push ( {
214238 type : "text" ,
@@ -229,7 +253,9 @@ export const registerTriggerElicitationRequestAsyncTool = (server: McpServer) =>
229253 // Include progress and raw result for debugging
230254 content . push ( {
231255 type : "text" ,
232- text : `\nProgress:\n${ statusMessages . join ( "\n" ) } \n\nRaw result: ${ JSON . stringify ( result , null , 2 ) } ` ,
256+ text : `\nProgress:\n${ statusMessages . join (
257+ "\n"
258+ ) } \n\nRaw result: ${ JSON . stringify ( result , null , 2 ) } `,
233259 } ) ;
234260
235261 return { content } ;
0 commit comments