
Discovery.pudu
Pudu49 lines1.7 KB
1/** @App.Discovery.Handler — server identity, capabilities, and handshake answers */2module PuduLangMcp.App.Discovery34import Std.Json as Json5import PuduLangMcp.App.Context as Context6import PuduLangMcp.Constants.Protocol as Protocol7import PuduLangMcp.Constants.Server as Server8import PuduLangMcp.Domain.Rpc.Reply as Reply9import PuduLangMcp.Errors.RpcError as RpcError10import PuduLangMcp.Utils.JsonAccess as Access111213export fn capabilities() -> Json.Json {14 Json.object(&[15 ("tools", Json.object(&[])),16 ("resources", Json.object(&[])),17 ("prompts", Json.object(&[])),18 ("completions", Json.object(&[]))19 ])20}212223export fn discover(context: &Context.Context, params: &Json.Json) -> Result[Json.Json, RpcError.ProtocolError] {24 Ok(Reply.complete(&[25 ("supportedVersions", Access.texts(&Protocol.supportedVersions())),26 ("capabilities", capabilities()),27 ("instructions", Json.Text(Server.INSTRUCTIONS))28 ], &Reply.Cached(Server.LIST_TTL_MS, Protocol.CACHE_PUBLIC)))29}303132export fn initialize(version: Str) -> Json.Json {33 Reply.complete(&[34 ("protocolVersion", Json.Text(version)),35 ("capabilities", capabilities()),36 ("serverInfo", Json.object(&[37 ("name", Json.Text(Server.SERVER_NAME)),38 ("title", Json.Text(Server.SERVER_TITLE)),39 ("version", Json.Text(Server.SERVER_VERSION))40 ])),41 ("instructions", Json.Text(Server.INSTRUCTIONS))42 ], &Reply.NoCache)43}444546export fn pong() -> Json.Json {47 Reply.complete(&[], &Reply.NoCache)48}49