package tools import ( "encoding/json" "git.x2erp.com/qdy/go-svc-mcp/internal/mcp" ) func init() { mcp.Register("get_user_count", "获取用户数量,演示数据库工厂和上下文注入", map[string]interface{}{ "type": "object", "properties": map[string]interface{}{ "active_only": map[string]interface{}{ "type": "boolean", "description": "是否只统计活跃用户", "default": false, }, }, "required": []string{}, }, func(input json.RawMessage, deps *mcp.ToolDependencies) (interface{}, error) { var params struct { ActiveOnly bool `json:"active_only"` } if len(input) > 0 { if err := json.Unmarshal(input, ¶ms); err != nil { return nil, err } } // 使用数据库工厂执行查询(示例) var count int64 if deps.DBFactory != nil { // 实际项目中,这里会执行数据库查询 // 示例:假设我们有一个用户表 // db := deps.DBFactory.GetDB() // query := "SELECT COUNT(*) FROM users WHERE tenant_id = ?" // if params.ActiveOnly { // query += " AND status = 'active'" // } // err := db.QueryRow(query, deps.ReqCtx.TenantID).Scan(&count) // 模拟查询结果 count = 42 if params.ActiveOnly { count = 25 } } else { // 无数据库工厂,返回模拟数据 count = 100 if params.ActiveOnly { count = 60 } } return map[string]interface{}{ "tenant_id": deps.ReqCtx.TenantID, "user_count": count, "active_only": params.ActiveOnly, "has_db": deps.DBFactory != nil, "timestamp": "2024-01-01T00:00:00Z", // 实际应使用 time.Now() }, nil }, ) }