WiiCITMS/servers/hrOrgAITools.go

158 lines
5.0 KiB
Go
Raw Normal View History

2025-11-07 14:14:34 +08:00
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
},
},
}