@@ -227,3 +227,91 @@ func TestServerPaginateVariousPageSizes(t *testing.T) {
227227 }
228228 }
229229}
230+
231+ func TestServerCapabilities (t * testing.T ) {
232+ testCases := []struct {
233+ name string
234+ configureServer func (s * Server )
235+ wantCapabilities * serverCapabilities
236+ }{
237+ {
238+ name : "No capabilities" ,
239+ configureServer : func (s * Server ) {},
240+ wantCapabilities : & serverCapabilities {
241+ Completions : & completionCapabilities {},
242+ Logging : & loggingCapabilities {},
243+ },
244+ },
245+ {
246+ name : "With prompts" ,
247+ configureServer : func (s * Server ) {
248+ s .AddPrompt (& Prompt {Name : "p" }, nil )
249+ },
250+ wantCapabilities : & serverCapabilities {
251+ Completions : & completionCapabilities {},
252+ Logging : & loggingCapabilities {},
253+ Prompts : & promptCapabilities {ListChanged : true },
254+ },
255+ },
256+ {
257+ name : "With resources" ,
258+ configureServer : func (s * Server ) {
259+ s .AddResource (& Resource {URI : "file:///r" }, nil )
260+ },
261+ wantCapabilities : & serverCapabilities {
262+ Completions : & completionCapabilities {},
263+ Logging : & loggingCapabilities {},
264+ Resources : & resourceCapabilities {ListChanged : true },
265+ },
266+ },
267+ {
268+ name : "With resource templates" ,
269+ configureServer : func (s * Server ) {
270+ s .AddResourceTemplate (& ResourceTemplate {URITemplate : "file:///rt" }, nil )
271+ },
272+ wantCapabilities : & serverCapabilities {
273+ Completions : & completionCapabilities {},
274+ Logging : & loggingCapabilities {},
275+ Resources : & resourceCapabilities {ListChanged : true },
276+ },
277+ },
278+ {
279+ name : "With tools" ,
280+ configureServer : func (s * Server ) {
281+ s .AddTool (& Tool {Name : "t" }, nil )
282+ },
283+ wantCapabilities : & serverCapabilities {
284+ Completions : & completionCapabilities {},
285+ Logging : & loggingCapabilities {},
286+ Tools : & toolCapabilities {ListChanged : true },
287+ },
288+ },
289+ {
290+ name : "With all capabilities" ,
291+ configureServer : func (s * Server ) {
292+ s .AddPrompt (& Prompt {Name : "p" }, nil )
293+ s .AddResource (& Resource {URI : "file:///r" }, nil )
294+ s .AddResourceTemplate (& ResourceTemplate {URITemplate : "file:///rt" }, nil )
295+ s .AddTool (& Tool {Name : "t" }, nil )
296+ },
297+ wantCapabilities : & serverCapabilities {
298+ Completions : & completionCapabilities {},
299+ Logging : & loggingCapabilities {},
300+ Prompts : & promptCapabilities {ListChanged : true },
301+ Resources : & resourceCapabilities {ListChanged : true },
302+ Tools : & toolCapabilities {ListChanged : true },
303+ },
304+ },
305+ }
306+
307+ for _ , tc := range testCases {
308+ t .Run (tc .name , func (t * testing.T ) {
309+ server := NewServer ("" , "" , nil )
310+ tc .configureServer (server )
311+ gotCapabilities := server .capabilities ()
312+ if diff := cmp .Diff (tc .wantCapabilities , gotCapabilities ); diff != "" {
313+ t .Errorf ("capabilities() mismatch (-want +got):\n %s" , diff )
314+ }
315+ })
316+ }
317+ }
0 commit comments