Class ::nsmcp::ToolRegistry (public)

 ::nx::Class ::nsmcp::ToolRegistry[i]

Defined in /usr/local/ns/tcl/nsmcp/lib/tools.tcl

Testcases:
No testcase defined.
Source code:
    :variable tools {}
    :public method register {tool} {
        set name [$tool name]
        if {[dict exists ${:tools} $name]} {error "duplicate tool: $name"}
        dict set :tools $name $tool
    }
    :public method list {context authorizer} {
        set result {}
        foreach name [lsort [dict keys ${:tools}]] {
            set tool [dict get ${:tools} $name]
            if {[$authorizer allowed $context [$tool permission]]} {
                lappend result [$tool describe]
            }
        }
        set members {}; set index 0
        foreach description $result {
            lappend members $index object [lindex $description 2]
            incr index
        }
        return [list {} object [list tools array $members]]
    }
    :public method call {context authorizer name arguments} {
        if {![dict exists ${:tools} $name]} {
            return -code error -errorcode {NSMCP RPC -32602} "Unknown tool"
        }
        set tool [dict get ${:tools} $name]
        $authorizer require $context [$tool permission]
        $tool validate $arguments
        if {[catch {$tool execute $context $arguments} result options]} {
            if {[lrange [dict get $options -errorcode] 0 1] eq {NSMCP RPC}} {
                return -options $options $result
            }
            ns_log error "nsmcp: tool execution failed: $name"
            return [list {} object {content array {0 object {type string text text string {Tool execution failed; consult the server log.}}} isError boolean true}]
        }
        # Both structured output and text for clients without structured support.
        return [list {} object [list structuredContent object [lindex $result 2]  content array [list 0 object [list type string text text string [ns_json value -- $result]]]  isError boolean false]]
    }
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: