plane_v2_api.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package data
  2. import (
  3. "github.com/mark3labs/mcp-go/mcp"
  4. "github.com/mark3labs/mcp-go/server"
  5. plane_v2 "fwh-toolbox-server/repositories/api/plane_v2"
  6. )
  7. // planeV2 通用 PlaneService 实例
  8. var planeV2Svc *plane_v2.PlaneService
  9. func registerPlaneV2ApiTools(s *server.MCPServer) {
  10. planeV2Svc = plane_v2.NewPlaneService()
  11. // ============ Workspace (读) ============
  12. s.AddTool(
  13. mcp.NewTool("plane_list_workspaces",
  14. mcp.WithDescription("列出当前用户有权访问的所有工作空间"),
  15. ),
  16. handlePlaneV2ListWorkspaces,
  17. )
  18. s.AddTool(
  19. mcp.NewTool("plane_get_workspace",
  20. mcp.WithDescription("获取工作空间详情"),
  21. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  22. ),
  23. handlePlaneV2GetWorkspace,
  24. )
  25. // ============ Project (读) ============
  26. s.AddTool(
  27. mcp.NewTool("plane_list_projects",
  28. mcp.WithDescription("列出工作空间下的所有项目"),
  29. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  30. ),
  31. handlePlaneV2ListProjects,
  32. )
  33. s.AddTool(
  34. mcp.NewTool("plane_get_project",
  35. mcp.WithDescription("获取项目详情"),
  36. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  37. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  38. ),
  39. handlePlaneV2GetProject,
  40. )
  41. // ============ Issue (读) ============
  42. s.AddTool(
  43. mcp.NewTool("plane_list_issues",
  44. mcp.WithDescription("列出项目工作项列表"),
  45. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  46. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  47. ),
  48. handlePlaneV2ListIssues,
  49. )
  50. s.AddTool(
  51. mcp.NewTool("plane_get_issue",
  52. mcp.WithDescription("获取工作项详情"),
  53. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  54. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  55. mcp.WithString("issue_id", mcp.Required(), mcp.Description("工作项 UUID")),
  56. ),
  57. handlePlaneV2GetIssue,
  58. )
  59. s.AddTool(
  60. mcp.NewTool("plane_get_sub_issues",
  61. mcp.WithDescription("获取子工作项列表"),
  62. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  63. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  64. mcp.WithString("issue_id", mcp.Required(), mcp.Description("父工作项 UUID")),
  65. ),
  66. handlePlaneV2GetSubIssues,
  67. )
  68. s.AddTool(
  69. mcp.NewTool("plane_get_issue_activity",
  70. mcp.WithDescription("获取工作项活动历史"),
  71. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  72. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  73. mcp.WithString("issue_id", mcp.Required(), mcp.Description("工作项 UUID")),
  74. ),
  75. handlePlaneV2GetIssueActivity,
  76. )
  77. // ============ Intake (读) ============
  78. s.AddTool(
  79. mcp.NewTool("plane_list_intake_issues",
  80. mcp.WithDescription("列出收件箱工作项"),
  81. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  82. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  83. mcp.WithString("status", mcp.Description("状态过滤,如 -2,-1,0,1,2")),
  84. ),
  85. handlePlaneV2ListIntakeIssues,
  86. )
  87. s.AddTool(
  88. mcp.NewTool("plane_get_intake_issue",
  89. mcp.WithDescription("获取收件箱工作项详情"),
  90. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  91. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  92. mcp.WithString("issue_id", mcp.Required(), mcp.Description("工作项 UUID")),
  93. ),
  94. handlePlaneV2GetIntakeIssue,
  95. )
  96. // ============ Cycle (读) ============
  97. s.AddTool(
  98. mcp.NewTool("plane_list_cycles",
  99. mcp.WithDescription("列出项目周期列表"),
  100. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  101. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  102. ),
  103. handlePlaneV2ListCycles,
  104. )
  105. s.AddTool(
  106. mcp.NewTool("plane_get_cycle",
  107. mcp.WithDescription("获取周期详情"),
  108. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  109. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  110. mcp.WithString("cycle_id", mcp.Required(), mcp.Description("周期 UUID")),
  111. ),
  112. handlePlaneV2GetCycle,
  113. )
  114. // ============ Module (读) ============
  115. s.AddTool(
  116. mcp.NewTool("plane_list_modules",
  117. mcp.WithDescription("列出项目模块列表"),
  118. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  119. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  120. ),
  121. handlePlaneV2ListModules,
  122. )
  123. s.AddTool(
  124. mcp.NewTool("plane_get_module",
  125. mcp.WithDescription("获取模块详情"),
  126. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  127. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  128. mcp.WithString("module_id", mcp.Required(), mcp.Description("模块 UUID")),
  129. ),
  130. handlePlaneV2GetModule,
  131. )
  132. // ============ Label (读) ============
  133. s.AddTool(
  134. mcp.NewTool("plane_list_labels",
  135. mcp.WithDescription("列出项目标签列表"),
  136. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  137. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  138. ),
  139. handlePlaneV2ListLabels,
  140. )
  141. // ============ State (读) ============
  142. s.AddTool(
  143. mcp.NewTool("plane_list_states",
  144. mcp.WithDescription("列出项目状态列表"),
  145. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  146. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  147. ),
  148. handlePlaneV2ListStates,
  149. )
  150. // ============ Page (读) ============
  151. s.AddTool(
  152. mcp.NewTool("plane_list_pages",
  153. mcp.WithDescription("列出项目页面列表"),
  154. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  155. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  156. ),
  157. handlePlaneV2ListPages,
  158. )
  159. s.AddTool(
  160. mcp.NewTool("plane_get_page",
  161. mcp.WithDescription("获取页面详情"),
  162. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  163. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  164. mcp.WithString("page_id", mcp.Required(), mcp.Description("页面 UUID")),
  165. ),
  166. handlePlaneV2GetPage,
  167. )
  168. s.AddTool(
  169. mcp.NewTool("plane_get_page_description",
  170. mcp.WithDescription("获取页面描述内容"),
  171. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  172. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  173. mcp.WithString("page_id", mcp.Required(), mcp.Description("页面 UUID")),
  174. ),
  175. handlePlaneV2GetPageDescription,
  176. )
  177. // ============ Member (读) ============
  178. s.AddTool(
  179. mcp.NewTool("plane_list_workspace_members",
  180. mcp.WithDescription("列出工作空间成员"),
  181. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  182. ),
  183. handlePlaneV2ListWorkspaceMembers,
  184. )
  185. s.AddTool(
  186. mcp.NewTool("plane_list_project_members",
  187. mcp.WithDescription("列出项目成员"),
  188. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  189. mcp.WithString("project_id", mcp.Required(), mcp.Description("项目 UUID")),
  190. ),
  191. handlePlaneV2ListProjectMembers,
  192. )
  193. // ============ Sticky (读) ============
  194. s.AddTool(
  195. mcp.NewTool("plane_list_stickies",
  196. mcp.WithDescription("列出工作空间便签"),
  197. mcp.WithString("workspace_slug", mcp.Required(), mcp.Description("工作空间 slug")),
  198. ),
  199. handlePlaneV2ListStickies,
  200. )
  201. }