@@ -62,6 +62,7 @@ import { Transport } from '../shared/transport.js';
6262import { validateAndWarnToolName } from '../shared/toolNameValidation.js' ;
6363import { ExperimentalMcpServerTasks } from '../experimental/tasks/mcp-server.js' ;
6464import type { ToolTaskHandler } from '../experimental/tasks/interfaces.js' ;
65+ import { ZodOptional } from 'zod' ;
6566
6667/**
6768 * High-level MCP server that provides a simpler API for working with resources, tools, and prompts.
@@ -557,8 +558,6 @@ export class McpServer {
557558 throw new McpError ( ErrorCode . InvalidParams , `Resource ${ uri } not found` ) ;
558559 } ) ;
559560
560- this . setCompletionRequestHandler ( ) ;
561-
562561 this . _resourceHandlersInitialized = true ;
563562 }
564563
@@ -623,8 +622,6 @@ export class McpServer {
623622 }
624623 } ) ;
625624
626- this . setCompletionRequestHandler ( ) ;
627-
628625 this . _promptHandlersInitialized = true ;
629626 }
630627
@@ -815,6 +812,14 @@ export class McpServer {
815812 }
816813 } ;
817814 this . _registeredResourceTemplates [ name ] = registeredResourceTemplate ;
815+
816+ // If the resource template has any completion callbacks, enable completions capability
817+ const variableNames = template . uriTemplate . variableNames ;
818+ const hasCompleter = Array . isArray ( variableNames ) && variableNames . some ( v => ! ! template . completeCallback ( v ) ) ;
819+ if ( hasCompleter ) {
820+ this . setCompletionRequestHandler ( ) ;
821+ }
822+
818823 return registeredResourceTemplate ;
819824 }
820825
@@ -848,6 +853,18 @@ export class McpServer {
848853 }
849854 } ;
850855 this . _registeredPrompts [ name ] = registeredPrompt ;
856+
857+ // If any argument uses a Completable schema, enable completions capability
858+ if ( argsSchema ) {
859+ const hasCompletable = Object . values ( argsSchema ) . some ( field => {
860+ const inner : unknown = field instanceof ZodOptional ? field . _def ?. innerType : field ;
861+ return isCompletable ( inner ) ;
862+ } ) ;
863+ if ( hasCompletable ) {
864+ this . setCompletionRequestHandler ( ) ;
865+ }
866+ }
867+
851868 return registeredPrompt ;
852869 }
853870
0 commit comments