Files
herolib/lib/mcp/factory.v
Mahmoud-Emad 914cba5388 feat: add HTTP/REST transport for MCP servers
- Refactor server to use a generic transport interface
- Add HttpTransport for JSON-RPC and REST over HTTP
- Move existing STDIO logic into a StdioTransport
- Enable dual-mode (STDIO/HTTP) via command-line flags
- Add new examples and docs for HTTP server usage
2025-07-28 13:32:01 +03:00

59 lines
1.7 KiB
V

module mcp
import freeflowuniverse.herolib.schemas.jsonrpc
import freeflowuniverse.herolib.mcp.transport
@[params]
pub struct ServerParams {
pub:
handlers map[string]jsonrpc.ProcedureHandler
config ServerConfiguration
transport transport.TransportConfig = transport.TransportConfig{
mode: .stdio
}
}
// new_server creates a new MCP server
pub fn new_server(backend Backend, params ServerParams) !&Server {
// Create the appropriate transport based on configuration
transport_impl := match params.transport.mode {
.stdio {
transport.new_stdio_transport()
}
.http {
transport.new_http_transport(params.transport.http)
}
}
mut server := &Server{
ServerConfiguration: params.config
backend: backend
transport: transport_impl
}
// Create a handler with the core MCP procedures registered
handler := jsonrpc.new_handler(jsonrpc.Handler{
procedures: {
// ...params.handlers,
// Core handlers
'initialize': server.initialize_handler
'notifications/initialized': initialized_notification_handler
// Resource handlers
'resources/list': server.resources_list_handler
'resources/read': server.resources_read_handler
'resources/templates/list': server.resources_templates_list_handler
'resources/subscribe': server.resources_subscribe_handler
// Prompt handlers
'prompts/list': server.prompts_list_handler
'prompts/get': server.prompts_get_handler
'completion/complete': server.prompts_get_handler
// Tool handlers
'tools/list': server.tools_list_handler
'tools/call': server.tools_call_handler
}
})!
server.handler = *handler
return server
}