package data import ( "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" plane_v2 "fwh-toolbox-server/repositories/api/plane_v2" ) // planeV2 通用 PlaneService 实例 var planeV2Svc *plane_v2.PlaneService func registerPlaneV2ApiTools(s *server.MCPServer) { planeV2Svc = plane_v2.NewPlaneService() // ============ Workspace (读) ============ s.AddTool( mcp.NewTool("plane_list_workspaces", mcp.WithDescription("列出当前用户有权访问的所有工作空间"), ), handlePlaneV2ListWorkspaces, ) s.AddTool( mcp.NewTool("plane_get_workspace", mcp.WithDescription("获取工作空间详情"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), ), handlePlaneV2GetWorkspace, ) // ============ Project (读) ============ s.AddTool( mcp.NewTool("plane_list_projects", mcp.WithDescription("列出工作空间下的所有项目"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), ), handlePlaneV2ListProjects, ) s.AddTool( mcp.NewTool("plane_get_project", mcp.WithDescription("获取项目详情"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), ), handlePlaneV2GetProject, ) // ============ Issue (读) ============ s.AddTool( mcp.NewTool("plane_list_issues", mcp.WithDescription("列出项目工作项列表"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), ), handlePlaneV2ListIssues, ) s.AddTool( mcp.NewTool("plane_get_issue", mcp.WithDescription("获取工作项详情"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), mcp.WithString("issue_id", mcp.Required(), mcp.Description("工作项 UUID")), ), handlePlaneV2GetIssue, ) s.AddTool( mcp.NewTool("plane_get_sub_issues", mcp.WithDescription("获取子工作项列表"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), mcp.WithString("issue_id", mcp.Required(), mcp.Description("父工作项 UUID")), ), handlePlaneV2GetSubIssues, ) s.AddTool( mcp.NewTool("plane_get_issue_activity", mcp.WithDescription("获取工作项活动历史"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), mcp.WithString("issue_id", mcp.Required(), mcp.Description("工作项 UUID")), ), handlePlaneV2GetIssueActivity, ) // ============ Intake (读) ============ s.AddTool( mcp.NewTool("plane_list_intake_issues", mcp.WithDescription("列出收件箱工作项"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), mcp.WithString("status", mcp.Description("状态过滤,如 -2,-1,0,1,2")), ), handlePlaneV2ListIntakeIssues, ) s.AddTool( mcp.NewTool("plane_get_intake_issue", mcp.WithDescription("获取收件箱工作项详情"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), mcp.WithString("issue_id", mcp.Required(), mcp.Description("工作项 UUID")), ), handlePlaneV2GetIntakeIssue, ) // ============ Cycle (读) ============ s.AddTool( mcp.NewTool("plane_list_cycles", mcp.WithDescription("列出项目周期列表"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), ), handlePlaneV2ListCycles, ) s.AddTool( mcp.NewTool("plane_get_cycle", mcp.WithDescription("获取周期详情"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), mcp.WithString("cycle_id", mcp.Required(), mcp.Description("周期 UUID")), ), handlePlaneV2GetCycle, ) // ============ Module (读) ============ s.AddTool( mcp.NewTool("plane_list_modules", mcp.WithDescription("列出项目模块列表"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), ), handlePlaneV2ListModules, ) s.AddTool( mcp.NewTool("plane_get_module", mcp.WithDescription("获取模块详情"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), mcp.WithString("module_id", mcp.Required(), mcp.Description("模块 UUID")), ), handlePlaneV2GetModule, ) // ============ Label (读) ============ s.AddTool( mcp.NewTool("plane_list_labels", mcp.WithDescription("列出项目标签列表"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), ), handlePlaneV2ListLabels, ) // ============ State (读) ============ s.AddTool( mcp.NewTool("plane_list_states", mcp.WithDescription("列出项目状态列表"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), ), handlePlaneV2ListStates, ) // ============ Page (读) ============ s.AddTool( mcp.NewTool("plane_list_pages", mcp.WithDescription("列出项目页面列表"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), ), handlePlaneV2ListPages, ) s.AddTool( mcp.NewTool("plane_get_page", mcp.WithDescription("获取页面详情"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), mcp.WithString("page_id", mcp.Required(), mcp.Description("页面 UUID")), ), handlePlaneV2GetPage, ) s.AddTool( mcp.NewTool("plane_get_page_description", mcp.WithDescription("获取页面描述内容"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), mcp.WithString("page_id", mcp.Required(), mcp.Description("页面 UUID")), ), handlePlaneV2GetPageDescription, ) // ============ Member (读) ============ s.AddTool( mcp.NewTool("plane_list_workspace_members", mcp.WithDescription("列出工作空间成员"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), ), handlePlaneV2ListWorkspaceMembers, ) s.AddTool( mcp.NewTool("plane_list_project_members", mcp.WithDescription("列出项目成员"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")), ), handlePlaneV2ListProjectMembers, ) // ============ Sticky (读) ============ s.AddTool( mcp.NewTool("plane_list_stickies", mcp.WithDescription("列出工作空间便签"), mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")), ), handlePlaneV2ListStickies, ) }