-
Notifications
You must be signed in to change notification settings - Fork 146
Open
Labels
enhancementNew feature or requestNew feature or request
Description
I'm trying to build a very simple MCP Server base on HTTP SSE protocol (not STDIO).
This feature is implemented or not ? The MCP doesn't seem to be connected.
import Foundation
import Logging
// Configure Logger
LoggingSystem.bootstrap { label in
var handler = StreamLogHandler.standardOutput(label: label)
handler.logLevel = .trace
return handler
}
// Create logger
let logger = Logger(label: "com.example.mcp")
let server = Server(
name: "Swift Version Server",
version: "1.0.0",
capabilities: .init(tools: .init(listChanged: false))
)
let transport = HTTPClientTransport(
endpoint: URL(string: "http://localhost:8080")!,
logger:logger
)
try await server.start(transport: transport)
let tool = Tool(name: "swift_version",
description: "Returns the current Swift version",
inputSchema: .object([
"type": .string("object")
]))
await server.withMethodHandler(ListTools.self) { params in
ListTools.Result(tools: [tool])
}
await server.withMethodHandler(CallTool.self) { params in
guard params.name == tool.name else {
throw MCPError.invalidParams("Wrong tool name: \(params.name)")
}
return CallTool.Result(content: [.text(swiftVersion() ?? "No version")])
}
func swiftVersion() -> String? {
let process = Process()
process.executableURL = URL(fileURLWithPath: "/usr/bin/env")
process.arguments = ["swift", "--version"]
let outputPipe = Pipe()
process.standardOutput = outputPipe
do {
try process.run()
process.waitUntilExit()
let data = outputPipe.fileHandleForReading.readDataToEndOfFile()
return String(data: data, encoding: .utf8)
} catch {
return "Error running swift-version: \(error)"
}
}
await server.waitUntilCompleted()
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request