package servers import ( "context" "encoding/json" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" ) // ScheduleTools MCP工具:仅注册接口,不暴露提醒发送功能 var ScheduleTools = []server.ServerTool{ // 创建日程 { Tool: mcp.NewTool( "createSchedule", mcp.WithDescription("创建个人日程 (不包含提醒发送)"), mcp.WithString("ownerStaffGuid", mcp.Required(), mcp.Description("所属员工GUID")), mcp.WithString("title", mcp.Required(), mcp.Description("标题")), mcp.WithString("description", mcp.Description("描述")), mcp.WithString("location", mcp.Description("地点")), mcp.WithString("startTime", mcp.Required(), mcp.Description("开始时间,ISO8601")), mcp.WithString("endTime", mcp.Required(), mcp.Description("结束时间,ISO8601")), mcp.WithBoolean("allDay", mcp.Description("是否全天")), mcp.WithNumber("remindMinutesBefore", mcp.Description("提前提醒分钟数,0为不提醒")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { // TODO: call procOa.CreateSchedule when implemented payload := map[string]interface{}{ "message": "createSchedule is registered", } b, _ := json.Marshal(payload) return mcp.NewToolResultText(string(b)), nil }, }, // 更新日程 { Tool: mcp.NewTool( "updateSchedule", mcp.WithDescription("更新个人日程 (不包含提醒发送)"), mcp.WithString("scheduleGuid", mcp.Required(), mcp.Description("日程GUID")), mcp.WithString("title", mcp.Description("标题")), mcp.WithString("description", mcp.Description("描述")), mcp.WithString("location", mcp.Description("地点")), mcp.WithString("startTime", mcp.Description("开始时间,ISO8601")), mcp.WithString("endTime", mcp.Description("结束时间,ISO8601")), mcp.WithBoolean("allDay", mcp.Description("是否全天")), mcp.WithNumber("remindMinutesBefore", mcp.Description("提前提醒分钟数,0为不提醒")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { // TODO: call procOa.UpdateSchedule when implemented payload := map[string]interface{}{ "message": "updateSchedule is registered", } b, _ := json.Marshal(payload) return mcp.NewToolResultText(string(b)), nil }, }, // 查询日程 { Tool: mcp.NewTool( "listSchedules", mcp.WithDescription("按员工与时间范围查询个人日程"), mcp.WithString("ownerStaffGuid", mcp.Required(), mcp.Description("所属员工GUID")), mcp.WithString("from", mcp.Description("开始范围,ISO8601,可选")), mcp.WithString("to", mcp.Description("结束范围,ISO8601,可选")), mcp.WithNumber("limit", mcp.Description("分页大小,默认20")), mcp.WithNumber("offset", mcp.Description("分页偏移,默认0")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { // TODO: call procOa.ListSchedules when implemented payload := map[string]interface{}{ "message": "listSchedules is registered", } b, _ := json.Marshal(payload) return mcp.NewToolResultText(string(b)), nil }, }, // 冲突检查 { Tool: mcp.NewTool( "checkScheduleConflicts", mcp.WithDescription("检查日程时间是否冲突"), mcp.WithString("ownerStaffGuid", mcp.Required(), mcp.Description("所属员工GUID")), mcp.WithString("startTime", mcp.Required(), mcp.Description("开始时间,ISO8601")), mcp.WithString("endTime", mcp.Required(), mcp.Description("结束时间,ISO8601")), mcp.WithString("excludeGuid", mcp.Description("更新时排除自身GUID")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { // TODO: call procOa.CheckScheduleConflicts when implemented payload := map[string]interface{}{ "message": "checkScheduleConflicts is registered", } b, _ := json.Marshal(payload) return mcp.NewToolResultText(string(b)), nil }, }, // 取消日程(可选) { Tool: mcp.NewTool( "cancelSchedule", mcp.WithDescription("取消个人日程 (将状态置为取消)"), mcp.WithString("scheduleGuid", mcp.Required(), mcp.Description("日程GUID")), ), Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { // TODO: call procOa.CancelSchedule when implemented payload := map[string]interface{}{ "message": "cancelSchedule is registered", } b, _ := json.Marshal(payload) return mcp.NewToolResultText(string(b)), nil }, }, } // RegisterScheduleTools 将日程工具附加到传入工具数组 func RegisterScheduleTools(tools *[]server.ServerTool) { if tools == nil { return } *tools = append(*tools, ScheduleTools...) }