@@ -42,11 +42,11 @@ func TestMCPServer_Capabilities(t *testing.T) {
4242 assert .Equal (t , "1.0.0" , initResult .ServerInfo .Version )
4343 assert .NotNil (t , initResult .Capabilities .Resources )
4444 assert .False (t , initResult .Capabilities .Resources .Subscribe )
45- assert .True (t , initResult .Capabilities .Resources .ListChanged )
45+ assert .False (t , initResult .Capabilities .Resources .ListChanged )
4646 assert .NotNil (t , initResult .Capabilities .Prompts )
47- assert .True (t , initResult .Capabilities .Prompts .ListChanged )
47+ assert .False (t , initResult .Capabilities .Prompts .ListChanged )
4848 assert .NotNil (t , initResult .Capabilities .Tools )
49- assert .True (t , initResult .Capabilities .Tools .ListChanged )
49+ assert .False (t , initResult .Capabilities .Tools .ListChanged )
5050 assert .Nil (t , initResult .Capabilities .Logging )
5151 },
5252 },
@@ -55,6 +55,7 @@ func TestMCPServer_Capabilities(t *testing.T) {
5555 options : []ServerOption {
5656 WithResourceCapabilities (true , true ),
5757 WithPromptCapabilities (true ),
58+ WithToolCapabilities (true ),
5859 WithLogging (),
5960 },
6061 validate : func (t * testing.T , response mcp.JSONRPCMessage ) {
@@ -73,8 +74,8 @@ func TestMCPServer_Capabilities(t *testing.T) {
7374 assert .Equal (t , "1.0.0" , initResult .ServerInfo .Version )
7475
7576 assert .NotNil (t , initResult .Capabilities .Resources )
76- // Resources capabilities are now always false for subscribe and true for listChanged
77- assert .False (t , initResult .Capabilities .Resources .Subscribe )
77+
78+ assert .True (t , initResult .Capabilities .Resources .Subscribe )
7879 assert .True (t , initResult .Capabilities .Resources .ListChanged )
7980
8081 assert .NotNil (t , initResult .Capabilities .Prompts )
@@ -83,6 +84,43 @@ func TestMCPServer_Capabilities(t *testing.T) {
8384 assert .NotNil (t , initResult .Capabilities .Tools )
8485 assert .True (t , initResult .Capabilities .Tools .ListChanged )
8586
87+ assert .NotNil (t , initResult .Capabilities .Logging )
88+ },
89+ },
90+ {
91+ name : "Specific capabilities" ,
92+ options : []ServerOption {
93+ WithResourceCapabilities (true , false ),
94+ WithPromptCapabilities (true ),
95+ WithToolCapabilities (false ),
96+ WithLogging (),
97+ },
98+ validate : func (t * testing.T , response mcp.JSONRPCMessage ) {
99+ resp , ok := response .(mcp.JSONRPCResponse )
100+ assert .True (t , ok )
101+
102+ initResult , ok := resp .Result .(mcp.InitializeResult )
103+ assert .True (t , ok )
104+
105+ assert .Equal (
106+ t ,
107+ mcp .LATEST_PROTOCOL_VERSION ,
108+ initResult .ProtocolVersion ,
109+ )
110+ assert .Equal (t , "test-server" , initResult .ServerInfo .Name )
111+ assert .Equal (t , "1.0.0" , initResult .ServerInfo .Version )
112+
113+ assert .NotNil (t , initResult .Capabilities .Resources )
114+
115+ assert .True (t , initResult .Capabilities .Resources .Subscribe )
116+ assert .False (t , initResult .Capabilities .Resources .ListChanged )
117+
118+ assert .NotNil (t , initResult .Capabilities .Prompts )
119+ assert .True (t , initResult .Capabilities .Prompts .ListChanged )
120+
121+ assert .NotNil (t , initResult .Capabilities .Tools )
122+ assert .False (t , initResult .Capabilities .Tools .ListChanged )
123+
86124 assert .NotNil (t , initResult .Capabilities .Logging )
87125 },
88126 },
@@ -525,6 +563,7 @@ func TestMCPServer_HandleUndefinedHandlers(t *testing.T) {
525563 server := NewMCPServer ("test-server" , "1.0.0" ,
526564 WithResourceCapabilities (true , true ),
527565 WithPromptCapabilities (true ),
566+ WithToolCapabilities (true ),
528567 )
529568
530569 // Add a test tool to enable tool capabilities
@@ -600,14 +639,10 @@ func TestMCPServer_HandleUndefinedHandlers(t *testing.T) {
600639}
601640
602641func TestMCPServer_HandleMethodsWithoutCapabilities (t * testing.T ) {
603- server := NewMCPServer (
604- "test-server" ,
605- "1.0.0" ,
606- )
607-
608642 tests := []struct {
609643 name string
610644 message string
645+ options []ServerOption
611646 expectedErr int
612647 }{
613648 {
@@ -620,6 +655,9 @@ func TestMCPServer_HandleMethodsWithoutCapabilities(t *testing.T) {
620655 "name": "test-tool"
621656 }
622657 }` ,
658+ options : []ServerOption {
659+ WithToolCapabilities (false ),
660+ },
623661 expectedErr : mcp .METHOD_NOT_FOUND ,
624662 },
625663 {
@@ -632,6 +670,9 @@ func TestMCPServer_HandleMethodsWithoutCapabilities(t *testing.T) {
632670 "name": "test-prompt"
633671 }
634672 }` ,
673+ options : []ServerOption {
674+ WithPromptCapabilities (false ),
675+ },
635676 expectedErr : mcp .METHOD_NOT_FOUND ,
636677 },
637678 {
@@ -644,12 +685,16 @@ func TestMCPServer_HandleMethodsWithoutCapabilities(t *testing.T) {
644685 "uri": "test-resource"
645686 }
646687 }` ,
688+ options : []ServerOption {
689+ WithResourceCapabilities (false , false ),
690+ },
647691 expectedErr : mcp .METHOD_NOT_FOUND ,
648692 },
649693 }
650694
651695 for _ , tt := range tests {
652696 t .Run (tt .name , func (t * testing.T ) {
697+ server := NewMCPServer ("test-server" , "1.0.0" , tt .options ... )
653698 response := server .HandleMessage (
654699 context .Background (),
655700 []byte (tt .message ),
0 commit comments