2026-04-09 10:01:23 +08:00
|
|
|
package providers
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
2026-05-30 21:19:36 +08:00
|
|
|
"cs-ai-agent/internal/pkg/config"
|
2026-04-09 10:01:23 +08:00
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/modelcontextprotocol/go-sdk/mcp"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type systemToolProvider struct{}
|
|
|
|
|
|
|
|
|
|
func NewSystemToolProvider() ToolProvider {
|
|
|
|
|
return &systemToolProvider{}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (p *systemToolProvider) Name() string {
|
|
|
|
|
return "system"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (p *systemToolProvider) Register(server *mcp.Server) error {
|
|
|
|
|
mcp.AddTool(
|
|
|
|
|
server,
|
|
|
|
|
&mcp.Tool{
|
|
|
|
|
Name: "server_time",
|
|
|
|
|
Description: "获取当前服务端时间,可选传入时区。",
|
|
|
|
|
},
|
|
|
|
|
func(_ context.Context, _ *mcp.CallToolRequest, args serverTimeArgs) (*mcp.CallToolResult, map[string]any, error) {
|
|
|
|
|
loc := time.Local
|
|
|
|
|
timezone := args.Timezone
|
|
|
|
|
if timezone == "" {
|
|
|
|
|
timezone = "Local"
|
|
|
|
|
} else if loaded, err := time.LoadLocation(timezone); err == nil {
|
|
|
|
|
loc = loaded
|
|
|
|
|
}
|
|
|
|
|
now := time.Now().In(loc)
|
|
|
|
|
return nil, map[string]any{
|
|
|
|
|
"timezone": timezone,
|
|
|
|
|
"timestamp": now.Format("2006-01-02 15:04:05"),
|
|
|
|
|
"unix": now.Unix(),
|
|
|
|
|
}, nil
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
mcp.AddTool(
|
|
|
|
|
server,
|
|
|
|
|
&mcp.Tool{
|
|
|
|
|
Name: "service_info",
|
2026-05-30 21:19:36 +08:00
|
|
|
Description: "查看当前 cs-ai-agent 服务的基础运行信息。",
|
2026-04-09 10:01:23 +08:00
|
|
|
},
|
|
|
|
|
func(ctx context.Context, req *mcp.CallToolRequest, _ struct{}) (*mcp.CallToolResult, map[string]any, error) {
|
|
|
|
|
cfg := config.Current()
|
|
|
|
|
return nil, map[string]any{
|
2026-05-30 21:19:36 +08:00
|
|
|
"name": "cs-ai-agent",
|
2026-04-09 10:01:23 +08:00
|
|
|
"version": "v1",
|
|
|
|
|
"mcpPath": "/api/mcp",
|
|
|
|
|
"port": cfg.Server.Port,
|
|
|
|
|
"mcpEnabled": cfg.MCP.Enabled,
|
|
|
|
|
"vectorDb": cfg.VectorDB.Type,
|
|
|
|
|
"storageType": cfg.Storage.Default,
|
|
|
|
|
}, nil
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type serverTimeArgs struct {
|
|
|
|
|
Timezone string `json:"timezone,omitempty" jsonschema:"可选时区名称,例如 Asia/Shanghai 或 UTC"`
|
|
|
|
|
}
|