@@ -46,6 +46,10 @@ def initialize(
46
46
@resource_index = index_resources_by_uri ( resources )
47
47
@server_context = server_context
48
48
@configuration = MCP . configuration . merge ( configuration )
49
+ @capabilities = Capabilities . new ( capabilities )
50
+ @capabilities . support_tools if tools . any?
51
+ @capabilities . support_prompts if prompts . any?
52
+ @capabilities . support_resources if resources . any? || resource_templates . any?
49
53
50
54
@handlers = {
51
55
Methods ::RESOURCES_LIST => method ( :list_resources ) ,
@@ -67,7 +71,7 @@ def initialize(
67
71
end
68
72
69
73
def capabilities
70
- @capabilities ||= determine_capabilities
74
+ @capabilities . to_h
71
75
end
72
76
73
77
def handle ( request )
@@ -93,6 +97,7 @@ def define_prompt(name: nil, description: nil, arguments: [], &block)
93
97
end
94
98
95
99
def resources_list_handler ( &block )
100
+ @capabilities . support_resources
96
101
@handlers [ Methods ::RESOURCES_LIST ] = block
97
102
end
98
103
@@ -101,10 +106,12 @@ def resources_read_handler(&block)
101
106
end
102
107
103
108
def resources_templates_list_handler ( &block )
109
+ @capabilities . support_resources
104
110
@handlers [ Methods ::RESOURCES_TEMPLATES_LIST ] = block
105
111
end
106
112
107
113
def tools_list_handler ( &block )
114
+ @capabilities . support_tools
108
115
@handlers [ Methods ::TOOLS_LIST ] = block
109
116
end
110
117
@@ -113,6 +120,7 @@ def tools_call_handler(&block)
113
120
end
114
121
115
122
def prompts_list_handler ( &block )
123
+ @capabilities . support_prompts
116
124
@handlers [ Methods ::PROMPTS_LIST ] = block
117
125
end
118
126
@@ -160,18 +168,6 @@ def handle_request(request, method)
160
168
}
161
169
end
162
170
163
- def determine_capabilities
164
- defines_prompts = @prompts . any? || @handlers [ Methods ::PROMPTS_LIST ] != method ( :list_prompts )
165
- defines_tools = @tools . any? || @handlers [ Methods ::TOOLS_LIST ] != method ( :list_tools )
166
- defines_resources = @resources . any? || @handlers [ Methods ::RESOURCES_LIST ] != method ( :list_resources )
167
- defines_resource_templates = @resource_templates . any? || @handlers [ Methods ::RESOURCES_TEMPLATES_LIST ] != method ( :list_resource_templates )
168
- {
169
- prompts : defines_prompts ? { } : nil ,
170
- resources : defines_resources || defines_resource_templates ? { } : nil ,
171
- tools : defines_tools ? { } : nil ,
172
- } . compact
173
- end
174
-
175
171
def server_info
176
172
@server_info ||= {
177
173
name :,
0 commit comments