yao/mcpclient/process.go
Max 934424f9ea feat(load): add initialization and reloading for Setting Registry
- Implemented initialization for the Setting Registry during the Load process.
- Added reload functionality to refresh the Setting Registry as needed.
- Enhanced error handling to capture and report issues during initialization and reloading.
2026-04-28 15:08:22 +08:00

120 lines
2.6 KiB
Go

package mcpclient
import (
"encoding/json"
"github.com/yaoapp/gou/process"
"github.com/yaoapp/kun/exception"
)
func init() {
process.RegisterGroup("mcpclient", map[string]process.Handler{
"get": ProcessGet,
"create": ProcessCreate,
"update": ProcessUpdate,
"delete": ProcessDelete,
"list": ProcessList,
})
}
func requireGlobal() {
if Global == nil {
exception.New("MCP Client Registry not initialized", 500).Throw()
}
}
// ProcessGet retrieves a client by ID.
// Args[0] string: client ID
func ProcessGet(p *process.Process) interface{} {
requireGlobal()
p.ValidateArgNums(1)
id := p.ArgsString(0)
client, err := Global.Get(id)
if err != nil {
exception.New(err.Error(), 404).Throw()
}
return client
}
// ProcessCreate adds a new MCP client.
// Args[0] map: Client data
func ProcessCreate(p *process.Process) interface{} {
requireGlobal()
p.ValidateArgNums(1)
var client Client
raw, err := json.Marshal(p.Args[0])
if err != nil {
exception.New("invalid client data: "+err.Error(), 400).Throw()
}
if err := json.Unmarshal(raw, &client); err != nil {
exception.New("invalid client data: "+err.Error(), 400).Throw()
}
result, err := Global.Create(&client)
if err != nil {
exception.New(err.Error(), 400).Throw()
}
return result
}
// ProcessUpdate modifies an existing MCP client.
// Args[0] string: client ID
// Args[1] map: Client data
func ProcessUpdate(p *process.Process) interface{} {
requireGlobal()
p.ValidateArgNums(2)
id := p.ArgsString(0)
var client Client
raw, err := json.Marshal(p.Args[1])
if err != nil {
exception.New("invalid client data: "+err.Error(), 400).Throw()
}
if err := json.Unmarshal(raw, &client); err != nil {
exception.New("invalid client data: "+err.Error(), 400).Throw()
}
result, err := Global.Update(id, &client)
if err != nil {
exception.New(err.Error(), 400).Throw()
}
return result
}
// ProcessDelete removes a client by ID.
// Args[0] string: client ID
func ProcessDelete(p *process.Process) interface{} {
requireGlobal()
p.ValidateArgNums(1)
id := p.ArgsString(0)
if err := Global.Delete(id); err != nil {
exception.New(err.Error(), 404).Throw()
}
return nil
}
// ProcessList returns clients matching a filter.
// Args[0] map: ClientFilter (optional)
func ProcessList(p *process.Process) interface{} {
requireGlobal()
var filter *ClientFilter
if len(p.Args) > 0 && p.Args[0] != nil {
raw, err := json.Marshal(p.Args[0])
if err == nil {
var f ClientFilter
if json.Unmarshal(raw, &f) == nil {
filter = &f
}
}
}
result, err := Global.List(filter)
if err != nil {
exception.New(err.Error(), 500).Throw()
}
return result
}