diff --git a/Sources/MCP/Server/Server.swift b/Sources/MCP/Server/Server.swift index 060b51f8..3a246fa0 100644 --- a/Sources/MCP/Server/Server.swift +++ b/Sources/MCP/Server/Server.swift @@ -188,11 +188,21 @@ public actor Server { name: String, version: String, title: String? = nil, + description: String? = nil, + websiteUrl: String? = nil, + icons: [Icon]? = nil, instructions: String? = nil, capabilities: Server.Capabilities = .init(), configuration: Configuration = .default ) { - self.serverInfo = Server.Info(name: name, version: version, title: title) + self.serverInfo = Server.Info( + name: name, + version: version, + title: title, + description: description, + websiteUrl: websiteUrl, + icons: icons + ) self.capabilities = capabilities self.configuration = configuration self.instructions = instructions diff --git a/Tests/MCPTests/ServerTests.swift b/Tests/MCPTests/ServerTests.swift index a7b61667..4713b278 100644 --- a/Tests/MCPTests/ServerTests.swift +++ b/Tests/MCPTests/ServerTests.swift @@ -53,6 +53,58 @@ struct ServerTests { await transport.disconnect() } + @Test("Initialize response includes server metadata") + func testServerInitializeMetadata() async throws { + let transport = MockTransport() + let icons = [ + Icon( + src: "https://example.com/icon-light.png", + mimeType: "image/png", + sizes: ["48x48"], + theme: .light + ), + Icon( + src: "https://example.com/icon-dark.svg", + mimeType: "image/svg+xml", + sizes: ["any"], + theme: .dark + ), + ] + let server = Server( + name: "TestServer", + version: "1.0", + title: "Test Server", + description: "A server used for testing", + websiteUrl: "https://example.com", + icons: icons, + instructions: "Use this server for tests" + ) + + try await transport.queue( + request: Initialize.request( + .init( + protocolVersion: Version.latest, + capabilities: .init(), + clientInfo: .init(name: "TestClient", version: "1.0") + ) + )) + try await server.start(transport: transport) + try await Task.sleep(for: .milliseconds(200)) + + let response: Response? = await transport.decodeLastSentMessage() + let result = try #require(response).result.get() + #expect(result.serverInfo.name == "TestServer") + #expect(result.serverInfo.version == "1.0") + #expect(result.serverInfo.title == "Test Server") + #expect(result.serverInfo.description == "A server used for testing") + #expect(result.serverInfo.websiteUrl == "https://example.com") + #expect(result.serverInfo.icons == icons) + #expect(result.instructions == "Use this server for tests") + + await server.stop() + await transport.disconnect() + } + @Test("Initialize hook - successful") func testInitializeHookSuccess() async throws { let transport = MockTransport()