package servers import ( "WiiCITMS/process/hr" "context" "encoding/json" "fmt" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" ) // HROrgAITools 组织架构查询工具(AI专用) var HROrgAITools = []server.ServerTool{ // 获取单个组织的详细信息(AI专用) { Tool: mcp.NewTool( "getOrganizationForAI", mcp.WithDescription("获取单个组织的详细信息,适用于AI查询组织结构"), mcp.WithString("orgGuid", mcp.Required(), mcp.Description("组织ID")), mcp.WithBoolean("includePositions", mcp.Description("是否包含岗位信息,默认false")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { orgGuid := request.GetString("orgGuid", "") if orgGuid == "" { return nil, fmt.Errorf("组织ID不能为空") } includePositions := request.GetBool("includePositions", false) org, proc := hr.GetOrganizationForAI(orgGuid, includePositions) if proc.IsError() { return mcp.NewToolResultText(""), proc.Error } repStr, err := json.Marshal(org) if err != nil { return mcp.NewToolResultText(""), err } return mcp.NewToolResultText(string(repStr)), nil }, }, // 获取组织树结构(AI专用) { Tool: mcp.NewTool( "getOrganizationTreeForAI", mcp.WithDescription("获取组织树结构,适用于AI查询完整组织架构"), mcp.WithString("rootOrgGuid", mcp.Description("根组织ID,不指定则获取所有顶级组织")), mcp.WithBoolean("includeStaff", mcp.Description("是否包含员工信息,默认false")), mcp.WithBoolean("includeDetails", mcp.Description("是否包含详细信息,默认true")), mcp.WithNumber("maxDepth", mcp.Description("最大深度,0表示不限制")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { params := hr.AIOrganizationTreeRequest{ RootOrgGuid: request.GetString("rootOrgGuid", ""), IncludeStaff: request.GetBool("includeStaff", false), IncludeDetails: request.GetBool("includeDetails", true), MaxDepth: request.GetInt("maxDepth", 0), } tree, proc := hr.GetOrganizationTreeForAI(params) if proc.IsError() { return mcp.NewToolResultText(""), proc.Error } repStr, err := json.Marshal(tree) if err != nil { return mcp.NewToolResultText(""), err } return mcp.NewToolResultText(string(repStr)), nil }, }, // 获取组织成员(AI专用) { Tool: mcp.NewTool( "getOrganizationMembers", mcp.WithDescription("获取组织成员列表,适用于AI查询部门成员"), mcp.WithString("orgGuid", mcp.Required(), mcp.Description("组织ID")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { orgGuid := request.GetString("orgGuid", "") if orgGuid == "" { return nil, fmt.Errorf("组织ID不能为空") } members, proc := hr.GetOrganizationMembers(orgGuid) if proc.IsError() { return mcp.NewToolResultText(""), proc.Error } repStr, err := json.Marshal(members) if err != nil { return mcp.NewToolResultText(""), err } return mcp.NewToolResultText(string(repStr)), nil }, }, // 获取组织完整路径(AI专用) { Tool: mcp.NewTool( "getFullOrganizationPath", mcp.WithDescription("获取组织的完整路径,适用于AI了解组织层级关系"), mcp.WithString("orgGuid", mcp.Required(), mcp.Description("组织ID")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { orgGuid := request.GetString("orgGuid", "") if orgGuid == "" { return nil, fmt.Errorf("组织ID不能为空") } path, proc := hr.GetFullOrganizationPath(orgGuid) if proc.IsError() { return mcp.NewToolResultText(""), proc.Error } result := map[string]string{ "path": path, } repStr, err := json.Marshal(result) if err != nil { return mcp.NewToolResultText(""), err } return mcp.NewToolResultText(string(repStr)), nil }, }, // 获取所有组织列表(AI专用,扁平结构) { Tool: mcp.NewTool( "getAllOrganizations", mcp.WithDescription("获取所有组织的扁平列表,适用于AI全面了解公司组织"), mcp.WithBoolean("includeDetails", mcp.Description("是否包含详细信息,默认false")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { // 获取参数 includeDetails := request.GetBool("includeDetails", false) // 创建空参数对象,只传递includeDetails params := hr.AIOrganizationTreeRequest{ IncludeDetails: includeDetails, } // 使用GetOrganizationTreeForAI并传递params参数 orgs, proc := hr.GetOrganizationTreeForAI(params) if proc.IsError() { return mcp.NewToolResultText(""), proc.Error } // 转换为JSON并返回 repStr, err := json.Marshal(orgs) if err != nil { return mcp.NewToolResultText(""), err } return mcp.NewToolResultText(string(repStr)), nil }, }, }