@energio/holded-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1040 -0
  3. package/dist/constants.d.ts +60 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/constants.js +72 -0
  6. package/dist/constants.js.map +1 -0
  7. package/dist/index.d.ts +11 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +86 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/schemas/accounting/account-balances.d.ts +19 -0
  12. package/dist/schemas/accounting/account-balances.d.ts.map +1 -0
  13. package/dist/schemas/accounting/account-balances.js +28 -0
  14. package/dist/schemas/accounting/account-balances.js.map +1 -0
  15. package/dist/schemas/accounting/accounts.d.ts +49 -0
  16. package/dist/schemas/accounting/accounts.d.ts.map +1 -0
  17. package/dist/schemas/accounting/accounts.js +50 -0
  18. package/dist/schemas/accounting/accounts.js.map +1 -0
  19. package/dist/schemas/accounting/daily-ledger.d.ts +45 -0
  20. package/dist/schemas/accounting/daily-ledger.d.ts.map +1 -0
  21. package/dist/schemas/accounting/daily-ledger.js +57 -0
  22. package/dist/schemas/accounting/daily-ledger.js.map +1 -0
  23. package/dist/schemas/common.d.ts +118 -0
  24. package/dist/schemas/common.d.ts.map +1 -0
  25. package/dist/schemas/common.js +126 -0
  26. package/dist/schemas/common.js.map +1 -0
  27. package/dist/schemas/crm/bookings.d.ts +108 -0
  28. package/dist/schemas/crm/bookings.d.ts.map +1 -0
  29. package/dist/schemas/crm/bookings.js +96 -0
  30. package/dist/schemas/crm/bookings.js.map +1 -0
  31. package/dist/schemas/crm/events.d.ts +57 -0
  32. package/dist/schemas/crm/events.d.ts.map +1 -0
  33. package/dist/schemas/crm/events.js +53 -0
  34. package/dist/schemas/crm/events.js.map +1 -0
  35. package/dist/schemas/crm/funnels.d.ts +60 -0
  36. package/dist/schemas/crm/funnels.d.ts.map +1 -0
  37. package/dist/schemas/crm/funnels.js +48 -0
  38. package/dist/schemas/crm/funnels.js.map +1 -0
  39. package/dist/schemas/crm/leads.d.ts +146 -0
  40. package/dist/schemas/crm/leads.d.ts.map +1 -0
  41. package/dist/schemas/crm/leads.js +129 -0
  42. package/dist/schemas/crm/leads.js.map +1 -0
  43. package/dist/schemas/invoicing/contacts.d.ts +352 -0
  44. package/dist/schemas/invoicing/contacts.d.ts.map +1 -0
  45. package/dist/schemas/invoicing/contacts.js +187 -0
  46. package/dist/schemas/invoicing/contacts.js.map +1 -0
  47. package/dist/schemas/invoicing/documents.d.ts +424 -0
  48. package/dist/schemas/invoicing/documents.d.ts.map +1 -0
  49. package/dist/schemas/invoicing/documents.js +217 -0
  50. package/dist/schemas/invoicing/documents.js.map +1 -0
  51. package/dist/schemas/invoicing/expenses-accounts.d.ts +47 -0
  52. package/dist/schemas/invoicing/expenses-accounts.d.ts.map +1 -0
  53. package/dist/schemas/invoicing/expenses-accounts.js +43 -0
  54. package/dist/schemas/invoicing/expenses-accounts.js.map +1 -0
  55. package/dist/schemas/invoicing/numbering-series.d.ts +94 -0
  56. package/dist/schemas/invoicing/numbering-series.d.ts.map +1 -0
  57. package/dist/schemas/invoicing/numbering-series.js +43 -0
  58. package/dist/schemas/invoicing/numbering-series.js.map +1 -0
  59. package/dist/schemas/invoicing/payments.d.ts +50 -0
  60. package/dist/schemas/invoicing/payments.d.ts.map +1 -0
  61. package/dist/schemas/invoicing/payments.js +46 -0
  62. package/dist/schemas/invoicing/payments.js.map +1 -0
  63. package/dist/schemas/invoicing/products.d.ts +176 -0
  64. package/dist/schemas/invoicing/products.d.ts.map +1 -0
  65. package/dist/schemas/invoicing/products.js +149 -0
  66. package/dist/schemas/invoicing/products.js.map +1 -0
  67. package/dist/schemas/invoicing/remittances.d.ts +21 -0
  68. package/dist/schemas/invoicing/remittances.d.ts.map +1 -0
  69. package/dist/schemas/invoicing/remittances.js +20 -0
  70. package/dist/schemas/invoicing/remittances.js.map +1 -0
  71. package/dist/schemas/invoicing/sales-channels.d.ts +45 -0
  72. package/dist/schemas/invoicing/sales-channels.d.ts.map +1 -0
  73. package/dist/schemas/invoicing/sales-channels.js +41 -0
  74. package/dist/schemas/invoicing/sales-channels.js.map +1 -0
  75. package/dist/schemas/invoicing/services.d.ts +55 -0
  76. package/dist/schemas/invoicing/services.d.ts.map +1 -0
  77. package/dist/schemas/invoicing/services.js +51 -0
  78. package/dist/schemas/invoicing/services.js.map +1 -0
  79. package/dist/schemas/invoicing/taxes.d.ts +12 -0
  80. package/dist/schemas/invoicing/taxes.d.ts.map +1 -0
  81. package/dist/schemas/invoicing/taxes.js +12 -0
  82. package/dist/schemas/invoicing/taxes.js.map +1 -0
  83. package/dist/schemas/invoicing/treasury.d.ts +42 -0
  84. package/dist/schemas/invoicing/treasury.d.ts.map +1 -0
  85. package/dist/schemas/invoicing/treasury.js +39 -0
  86. package/dist/schemas/invoicing/treasury.js.map +1 -0
  87. package/dist/schemas/invoicing/warehouses.d.ts +61 -0
  88. package/dist/schemas/invoicing/warehouses.d.ts.map +1 -0
  89. package/dist/schemas/invoicing/warehouses.js +43 -0
  90. package/dist/schemas/invoicing/warehouses.js.map +1 -0
  91. package/dist/schemas/projects/projects.d.ts +60 -0
  92. package/dist/schemas/projects/projects.d.ts.map +1 -0
  93. package/dist/schemas/projects/projects.js +55 -0
  94. package/dist/schemas/projects/projects.js.map +1 -0
  95. package/dist/schemas/projects/tasks.d.ts +68 -0
  96. package/dist/schemas/projects/tasks.d.ts.map +1 -0
  97. package/dist/schemas/projects/tasks.js +64 -0
  98. package/dist/schemas/projects/tasks.js.map +1 -0
  99. package/dist/schemas/projects/time-tracking.d.ts +80 -0
  100. package/dist/schemas/projects/time-tracking.d.ts.map +1 -0
  101. package/dist/schemas/projects/time-tracking.js +75 -0
  102. package/dist/schemas/projects/time-tracking.js.map +1 -0
  103. package/dist/schemas/team/employees.d.ts +135 -0
  104. package/dist/schemas/team/employees.d.ts.map +1 -0
  105. package/dist/schemas/team/employees.js +144 -0
  106. package/dist/schemas/team/employees.js.map +1 -0
  107. package/dist/schemas/team/time-tracking.d.ts +98 -0
  108. package/dist/schemas/team/time-tracking.d.ts.map +1 -0
  109. package/dist/schemas/team/time-tracking.js +89 -0
  110. package/dist/schemas/team/time-tracking.js.map +1 -0
  111. package/dist/services/api.d.ts +118 -0
  112. package/dist/services/api.d.ts.map +1 -0
  113. package/dist/services/api.js +441 -0
  114. package/dist/services/api.js.map +1 -0
  115. package/dist/tools/accounting/account-balances.d.ts +44 -0
  116. package/dist/tools/accounting/account-balances.d.ts.map +1 -0
  117. package/dist/tools/accounting/account-balances.js +240 -0
  118. package/dist/tools/accounting/account-balances.js.map +1 -0
  119. package/dist/tools/accounting/accounts.d.ts +18 -0
  120. package/dist/tools/accounting/accounts.d.ts.map +1 -0
  121. package/dist/tools/accounting/accounts.js +131 -0
  122. package/dist/tools/accounting/accounts.js.map +1 -0
  123. package/dist/tools/accounting/daily-ledger.d.ts +9 -0
  124. package/dist/tools/accounting/daily-ledger.d.ts.map +1 -0
  125. package/dist/tools/accounting/daily-ledger.js +117 -0
  126. package/dist/tools/accounting/daily-ledger.js.map +1 -0
  127. package/dist/tools/accounting/index.d.ts +9 -0
  128. package/dist/tools/accounting/index.d.ts.map +1 -0
  129. package/dist/tools/accounting/index.js +15 -0
  130. package/dist/tools/accounting/index.js.map +1 -0
  131. package/dist/tools/crm/bookings.d.ts +18 -0
  132. package/dist/tools/crm/bookings.d.ts.map +1 -0
  133. package/dist/tools/crm/bookings.js +272 -0
  134. package/dist/tools/crm/bookings.js.map +1 -0
  135. package/dist/tools/crm/events.d.ts +18 -0
  136. package/dist/tools/crm/events.d.ts.map +1 -0
  137. package/dist/tools/crm/events.js +134 -0
  138. package/dist/tools/crm/events.js.map +1 -0
  139. package/dist/tools/crm/funnels.d.ts +18 -0
  140. package/dist/tools/crm/funnels.d.ts.map +1 -0
  141. package/dist/tools/crm/funnels.js +113 -0
  142. package/dist/tools/crm/funnels.js.map +1 -0
  143. package/dist/tools/crm/index.d.ts +9 -0
  144. package/dist/tools/crm/index.d.ts.map +1 -0
  145. package/dist/tools/crm/index.js +17 -0
  146. package/dist/tools/crm/index.js.map +1 -0
  147. package/dist/tools/crm/leads.d.ts +18 -0
  148. package/dist/tools/crm/leads.d.ts.map +1 -0
  149. package/dist/tools/crm/leads.js +519 -0
  150. package/dist/tools/crm/leads.js.map +1 -0
  151. package/dist/tools/factory.d.ts +55 -0
  152. package/dist/tools/factory.d.ts.map +1 -0
  153. package/dist/tools/factory.js +145 -0
  154. package/dist/tools/factory.js.map +1 -0
  155. package/dist/tools/invoicing/contacts.d.ts +26 -0
  156. package/dist/tools/invoicing/contacts.d.ts.map +1 -0
  157. package/dist/tools/invoicing/contacts.js +358 -0
  158. package/dist/tools/invoicing/contacts.js.map +1 -0
  159. package/dist/tools/invoicing/documents.d.ts +18 -0
  160. package/dist/tools/invoicing/documents.d.ts.map +1 -0
  161. package/dist/tools/invoicing/documents.js +578 -0
  162. package/dist/tools/invoicing/documents.js.map +1 -0
  163. package/dist/tools/invoicing/expenses-accounts.d.ts +25 -0
  164. package/dist/tools/invoicing/expenses-accounts.d.ts.map +1 -0
  165. package/dist/tools/invoicing/expenses-accounts.js +111 -0
  166. package/dist/tools/invoicing/expenses-accounts.js.map +1 -0
  167. package/dist/tools/invoicing/index.d.ts +9 -0
  168. package/dist/tools/invoicing/index.d.ts.map +1 -0
  169. package/dist/tools/invoicing/index.js +33 -0
  170. package/dist/tools/invoicing/index.js.map +1 -0
  171. package/dist/tools/invoicing/numbering-series.d.ts +9 -0
  172. package/dist/tools/invoicing/numbering-series.d.ts.map +1 -0
  173. package/dist/tools/invoicing/numbering-series.js +161 -0
  174. package/dist/tools/invoicing/numbering-series.js.map +1 -0
  175. package/dist/tools/invoicing/payments.d.ts +18 -0
  176. package/dist/tools/invoicing/payments.d.ts.map +1 -0
  177. package/dist/tools/invoicing/payments.js +175 -0
  178. package/dist/tools/invoicing/payments.js.map +1 -0
  179. package/dist/tools/invoicing/products.d.ts +18 -0
  180. package/dist/tools/invoicing/products.d.ts.map +1 -0
  181. package/dist/tools/invoicing/products.js +389 -0
  182. package/dist/tools/invoicing/products.js.map +1 -0
  183. package/dist/tools/invoicing/remittances.d.ts +17 -0
  184. package/dist/tools/invoicing/remittances.d.ts.map +1 -0
  185. package/dist/tools/invoicing/remittances.js +76 -0
  186. package/dist/tools/invoicing/remittances.js.map +1 -0
  187. package/dist/tools/invoicing/sales-channels.d.ts +24 -0
  188. package/dist/tools/invoicing/sales-channels.d.ts.map +1 -0
  189. package/dist/tools/invoicing/sales-channels.js +105 -0
  190. package/dist/tools/invoicing/sales-channels.js.map +1 -0
  191. package/dist/tools/invoicing/services.d.ts +29 -0
  192. package/dist/tools/invoicing/services.d.ts.map +1 -0
  193. package/dist/tools/invoicing/services.js +124 -0
  194. package/dist/tools/invoicing/services.js.map +1 -0
  195. package/dist/tools/invoicing/taxes.d.ts +18 -0
  196. package/dist/tools/invoicing/taxes.d.ts.map +1 -0
  197. package/dist/tools/invoicing/taxes.js +58 -0
  198. package/dist/tools/invoicing/taxes.js.map +1 -0
  199. package/dist/tools/invoicing/treasury.d.ts +9 -0
  200. package/dist/tools/invoicing/treasury.d.ts.map +1 -0
  201. package/dist/tools/invoicing/treasury.js +196 -0
  202. package/dist/tools/invoicing/treasury.js.map +1 -0
  203. package/dist/tools/invoicing/warehouses.d.ts +18 -0
  204. package/dist/tools/invoicing/warehouses.d.ts.map +1 -0
  205. package/dist/tools/invoicing/warehouses.js +133 -0
  206. package/dist/tools/invoicing/warehouses.js.map +1 -0
  207. package/dist/tools/projects/index.d.ts +9 -0
  208. package/dist/tools/projects/index.d.ts.map +1 -0
  209. package/dist/tools/projects/index.js +15 -0
  210. package/dist/tools/projects/index.js.map +1 -0
  211. package/dist/tools/projects/projects.d.ts +18 -0
  212. package/dist/tools/projects/projects.d.ts.map +1 -0
  213. package/dist/tools/projects/projects.js +203 -0
  214. package/dist/tools/projects/projects.js.map +1 -0
  215. package/dist/tools/projects/tasks.d.ts +18 -0
  216. package/dist/tools/projects/tasks.d.ts.map +1 -0
  217. package/dist/tools/projects/tasks.js +154 -0
  218. package/dist/tools/projects/tasks.js.map +1 -0
  219. package/dist/tools/projects/time-tracking.d.ts +14 -0
  220. package/dist/tools/projects/time-tracking.d.ts.map +1 -0
  221. package/dist/tools/projects/time-tracking.js +291 -0
  222. package/dist/tools/projects/time-tracking.js.map +1 -0
  223. package/dist/tools/team/employees.d.ts +18 -0
  224. package/dist/tools/team/employees.d.ts.map +1 -0
  225. package/dist/tools/team/employees.js +149 -0
  226. package/dist/tools/team/employees.js.map +1 -0
  227. package/dist/tools/team/index.d.ts +9 -0
  228. package/dist/tools/team/index.d.ts.map +1 -0
  229. package/dist/tools/team/index.js +13 -0
  230. package/dist/tools/team/index.js.map +1 -0
  231. package/dist/tools/team/time-tracking.d.ts +18 -0
  232. package/dist/tools/team/time-tracking.d.ts.map +1 -0
  233. package/dist/tools/team/time-tracking.js +398 -0
  234. package/dist/tools/team/time-tracking.js.map +1 -0
  235. package/dist/tools/utilities.d.ts +45 -0
  236. package/dist/tools/utilities.d.ts.map +1 -0
  237. package/dist/tools/utilities.js +55 -0
  238. package/dist/tools/utilities.js.map +1 -0
  239. package/dist/types.d.ts +640 -0
  240. package/dist/types.d.ts.map +1 -0
  241. package/dist/types.js +29 -0
  242. package/dist/types.js.map +1 -0
  243. package/package.json +70 -0
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Projects module tools registration
3
+ */
4
+ import { registerProjectTools } from "./projects.js";
5
+ import { registerTaskTools } from "./tasks.js";
6
+ import { registerProjectTimeTrackingTools } from "./time-tracking.js";
7
+ /**
8
+ * Register all projects-related tools
9
+ */
10
+ export function registerProjectsTools(server) {
11
+ registerProjectTools(server);
12
+ registerTaskTools(server);
13
+ registerProjectTimeTrackingTools(server);
14
+ }
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/projects/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAEtE;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,gCAAgC,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Project tools for Holded API
3
+ */
4
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ import { Project } from "../../types.js";
6
+ /**
7
+ * Format projects as markdown
8
+ */
9
+ export declare function formatProjectsMarkdown(projects: Project[]): string;
10
+ /**
11
+ * Format a single project as markdown
12
+ */
13
+ export declare function formatProjectMarkdown(project: Project): string;
14
+ /**
15
+ * Register all project-related tools
16
+ */
17
+ export declare function registerProjectTools(server: McpServer): void;
18
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/projects.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,OAAO,EAAkB,MAAM,gBAAgB,CAAC;AAazD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAuBlE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAmC9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0H5D"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Project tools for Holded API
3
+ */
4
+ import { makeApiRequest, toStructuredContent } from "../../services/api.js";
5
+ import { ResponseFormat } from "../../constants.js";
6
+ import { ListProjectsInputSchema, CreateProjectInputSchema, GetProjectInputSchema, UpdateProjectInputSchema, DeleteProjectInputSchema, GetProjectSummaryInputSchema, } from "../../schemas/projects/projects.js";
7
+ import { registerCrudTools } from "../factory.js";
8
+ import { withErrorHandling } from "../utilities.js";
9
+ /**
10
+ * Format projects as markdown
11
+ */
12
+ export function formatProjectsMarkdown(projects) {
13
+ if (!projects.length) {
14
+ return "No projects found.";
15
+ }
16
+ const lines = ["# Projects", "", `Found ${projects.length} projects:`, ""];
17
+ for (const project of projects) {
18
+ lines.push(`## ${project.name}`);
19
+ lines.push(`- **ID**: ${project.id}`);
20
+ if (project.contactName)
21
+ lines.push(`- **Contact**: ${project.contactName}`);
22
+ // Handle status as number (API returns integer)
23
+ if (project.status !== undefined)
24
+ lines.push(`- **Status**: ${project.status}`);
25
+ // Use price (API field) or budget (legacy)
26
+ const budget = project.price ?? project.budget;
27
+ if (budget !== undefined)
28
+ lines.push(`- **Price/Budget**: ${budget}`);
29
+ // Task progress
30
+ if (project.numberOfTasks !== undefined) {
31
+ lines.push(`- **Tasks**: ${project.completedTasks || 0}/${project.numberOfTasks} completed`);
32
+ }
33
+ lines.push("");
34
+ }
35
+ return lines.join("\n");
36
+ }
37
+ /**
38
+ * Format a single project as markdown
39
+ */
40
+ export function formatProjectMarkdown(project) {
41
+ const lines = [`# ${project.name}`, ""];
42
+ lines.push(`- **ID**: ${project.id}`);
43
+ // Use desc (API field) or description (legacy)
44
+ const description = project.desc || project.description;
45
+ if (description)
46
+ lines.push(`- **Description**: ${description}`);
47
+ if (project.contactName)
48
+ lines.push(`- **Contact**: ${project.contactName} (${project.contactId || "N/A"})`);
49
+ if (project.status !== undefined)
50
+ lines.push(`- **Status**: ${project.status}`);
51
+ // Use price (API field) or budget (legacy)
52
+ const budget = project.price ?? project.budget;
53
+ if (budget !== undefined)
54
+ lines.push(`- **Price/Budget**: ${budget}`);
55
+ // Use date (API field) or startDate (legacy)
56
+ const startDate = project.date || project.startDate;
57
+ if (startDate)
58
+ lines.push(`- **Start Date**: ${new Date(startDate * 1000).toLocaleDateString()}`);
59
+ // dueDate is the actual API field name
60
+ const endDate = project.dueDate || project.endDate;
61
+ if (endDate)
62
+ lines.push(`- **Due Date**: ${new Date(endDate * 1000).toLocaleDateString()}`);
63
+ if (project.billable !== undefined)
64
+ lines.push(`- **Billable**: ${project.billable ? "Yes" : "No"}`);
65
+ if (project.category !== undefined)
66
+ lines.push(`- **Category**: ${project.category}`);
67
+ // Task progress
68
+ if (project.numberOfTasks !== undefined) {
69
+ lines.push(`- **Tasks**: ${project.completedTasks || 0}/${project.numberOfTasks} completed`);
70
+ }
71
+ if (project.tags && project.tags.length > 0) {
72
+ lines.push(`- **Tags**: ${project.tags.join(", ")}`);
73
+ }
74
+ // Labels
75
+ if (project.labels && project.labels.length > 0) {
76
+ const labelNames = project.labels.map(l => l.name || l.labelName).filter(Boolean);
77
+ if (labelNames.length > 0) {
78
+ lines.push(`- **Labels**: ${labelNames.join(", ")}`);
79
+ }
80
+ }
81
+ return lines.join("\n");
82
+ }
83
+ /**
84
+ * Register all project-related tools
85
+ */
86
+ export function registerProjectTools(server) {
87
+ // ── Standard CRUD via factory ───────────────────────────
88
+ registerCrudTools(server, {
89
+ module: "projects",
90
+ toolPrefix: "holded_projects",
91
+ resource: "project",
92
+ resourcePlural: "projects",
93
+ endpoint: "projects",
94
+ idParam: "project_id",
95
+ schemas: {
96
+ list: ListProjectsInputSchema,
97
+ get: GetProjectInputSchema,
98
+ create: CreateProjectInputSchema,
99
+ update: UpdateProjectInputSchema,
100
+ delete: DeleteProjectInputSchema,
101
+ },
102
+ titles: {
103
+ list: "List Holded Projects",
104
+ get: "Get Holded Project",
105
+ create: "Create Holded Project",
106
+ update: "Update Holded Project",
107
+ delete: "Delete Holded Project",
108
+ },
109
+ descriptions: {
110
+ list: `List all projects from Holded.
111
+
112
+ Args:
113
+ - page (number): Page number for pagination (default: 1, max 500 items per page)
114
+ - response_format ('json' | 'markdown'): Output format (default: 'json')
115
+
116
+ Returns:
117
+ Array of projects with id, name, desc, status, price, contactId, contactName, date, dueDate,
118
+ category, lists, billable, numberOfTasks, completedTasks, labels, and linked documents.`,
119
+ get: `Get a specific project by ID from Holded.
120
+
121
+ Args:
122
+ - project_id (string): The project ID to retrieve (required)
123
+ - response_format ('json' | 'markdown'): Output format (default: 'json')
124
+
125
+ Returns:
126
+ Project details including name, desc, status, price, date, dueDate, contactId, contactName,
127
+ category, lists, billable, numberOfTasks, completedTasks, labels, and linked documents.`,
128
+ create: `Create a new project in Holded.
129
+
130
+ Args:
131
+ - name (string): Project name (required)
132
+
133
+ Returns:
134
+ The created project with status, info, and assigned ID.`,
135
+ update: `Update an existing project in Holded.
136
+
137
+ Args:
138
+ - project_id (string): The project ID to update (required)
139
+ - name (string): Project name
140
+
141
+ Returns:
142
+ The updated project.`,
143
+ delete: `Delete a project from Holded.
144
+
145
+ Args:
146
+ - project_id (string): The project ID to delete (required)
147
+
148
+ Returns:
149
+ Confirmation of deletion.`,
150
+ },
151
+ formatters: {
152
+ list: formatProjectsMarkdown,
153
+ single: formatProjectMarkdown,
154
+ },
155
+ });
156
+ // ── Manual tools (non-standard endpoints) ───────────────
157
+ // Get Project Summary
158
+ server.registerTool("holded_projects_get_project_summary", {
159
+ title: "Get Holded Project Summary",
160
+ description: `Get a summary/overview of a project from Holded.
161
+
162
+ Args:
163
+ - project_id (string): The project ID to get summary for (required)
164
+ - response_format ('json' | 'markdown'): Output format (default: 'json')
165
+
166
+ Returns:
167
+ Project summary including total hours, costs, revenue, and task statistics.`,
168
+ inputSchema: GetProjectSummaryInputSchema,
169
+ annotations: {
170
+ readOnlyHint: true,
171
+ destructiveHint: false,
172
+ idempotentHint: true,
173
+ openWorldHint: true,
174
+ },
175
+ }, withErrorHandling(async (params) => {
176
+ const typedParams = params;
177
+ const summary = await makeApiRequest("projects", `projects/${typedParams.project_id}/summary`, "GET");
178
+ let textContent;
179
+ if (typedParams.response_format === ResponseFormat.MARKDOWN) {
180
+ const lines = [`# Project Summary`, ""];
181
+ lines.push(`- **Project ID**: ${summary.projectId}`);
182
+ if (summary.totalHours !== undefined)
183
+ lines.push(`- **Total Hours**: ${summary.totalHours}`);
184
+ if (summary.totalCost !== undefined)
185
+ lines.push(`- **Total Cost**: ${summary.totalCost}`);
186
+ if (summary.totalRevenue !== undefined)
187
+ lines.push(`- **Total Revenue**: ${summary.totalRevenue}`);
188
+ if (summary.tasksCompleted !== undefined)
189
+ lines.push(`- **Tasks Completed**: ${summary.tasksCompleted}`);
190
+ if (summary.tasksTotal !== undefined)
191
+ lines.push(`- **Total Tasks**: ${summary.tasksTotal}`);
192
+ textContent = lines.join("\n");
193
+ }
194
+ else {
195
+ textContent = JSON.stringify(summary, null, 2);
196
+ }
197
+ return {
198
+ content: [{ type: "text", text: textContent }],
199
+ structuredContent: toStructuredContent(summary),
200
+ };
201
+ }));
202
+ }
203
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/tools/projects/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Task tools for Holded API
3
+ */
4
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ import { Task } from "../../types.js";
6
+ /**
7
+ * Format tasks as markdown
8
+ */
9
+ export declare function formatTasksMarkdown(tasks: Task[]): string;
10
+ /**
11
+ * Format a single task as markdown
12
+ */
13
+ export declare function formatTaskMarkdown(task: Task): string;
14
+ /**
15
+ * Register all task-related tools
16
+ */
17
+ export declare function registerTaskTools(server: McpServer): void;
18
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/tasks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAYtC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAoBzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyHzD"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Task tools for Holded API
3
+ */
4
+ import { makeApiRequest, toStructuredContent } from "../../services/api.js";
5
+ import { ListTasksInputSchema, CreateTaskInputSchema, GetTaskInputSchema, UpdateTaskInputSchema, DeleteTaskInputSchema, } from "../../schemas/projects/tasks.js";
6
+ import { registerCrudTools } from "../factory.js";
7
+ import { withErrorHandling } from "../utilities.js";
8
+ /**
9
+ * Format tasks as markdown
10
+ */
11
+ export function formatTasksMarkdown(tasks) {
12
+ if (!tasks.length) {
13
+ return "No tasks found.";
14
+ }
15
+ const lines = ["# Tasks", "", `Found ${tasks.length} tasks:`, ""];
16
+ for (const task of tasks) {
17
+ lines.push(`## ${task.name}`);
18
+ lines.push(`- **ID**: ${task.id}`);
19
+ if (task.projectId)
20
+ lines.push(`- **Project ID**: ${task.projectId}`);
21
+ if (task.status)
22
+ lines.push(`- **Status**: ${task.status}`);
23
+ if (task.priority)
24
+ lines.push(`- **Priority**: ${task.priority}`);
25
+ if (task.dueDate)
26
+ lines.push(`- **Due Date**: ${new Date(task.dueDate * 1000).toLocaleDateString()}`);
27
+ if (task.completed !== undefined)
28
+ lines.push(`- **Completed**: ${task.completed ? "Yes" : "No"}`);
29
+ if (task.assignedTo)
30
+ lines.push(`- **Assigned To**: ${task.assignedTo}`);
31
+ lines.push("");
32
+ }
33
+ return lines.join("\n");
34
+ }
35
+ /**
36
+ * Format a single task as markdown
37
+ */
38
+ export function formatTaskMarkdown(task) {
39
+ return formatTasksMarkdown([task]);
40
+ }
41
+ /**
42
+ * Register all task-related tools
43
+ */
44
+ export function registerTaskTools(server) {
45
+ // ── Standard CRUD via factory (list, get, update, delete) ─
46
+ registerCrudTools(server, {
47
+ module: "projects",
48
+ toolPrefix: "holded_projects",
49
+ resource: "task",
50
+ resourcePlural: "tasks",
51
+ endpoint: "tasks",
52
+ idParam: "task_id",
53
+ schemas: {
54
+ list: ListTasksInputSchema,
55
+ get: GetTaskInputSchema,
56
+ update: UpdateTaskInputSchema,
57
+ delete: DeleteTaskInputSchema,
58
+ },
59
+ titles: {
60
+ list: "List Holded Tasks",
61
+ get: "Get Holded Task",
62
+ update: "Update Holded Task",
63
+ delete: "Delete Holded Task",
64
+ },
65
+ descriptions: {
66
+ list: `List all tasks from Holded Projects.
67
+
68
+ Args:
69
+ - page (number): Page number for pagination (default: 1, max 500 items per page)
70
+ - project_id (string): Filter by project ID (optional)
71
+ - response_format ('json' | 'markdown'): Output format (default: 'json')
72
+
73
+ Returns:
74
+ Array of tasks with id, name, status, priority, due date, and assignee.`,
75
+ get: `Get a specific task by ID from Holded Projects.
76
+
77
+ Args:
78
+ - task_id (string): The task ID to retrieve (required)
79
+ - response_format ('json' | 'markdown'): Output format (default: 'json')
80
+
81
+ Returns:
82
+ Task details including name, status, priority, due date, and assignee.`,
83
+ update: `Update an existing task in Holded Projects.
84
+
85
+ Note: The Holded API documentation does not explicitly document task updates.
86
+ This tool supports updating the task name. Additional fields may be supported
87
+ but are not officially documented.
88
+
89
+ Args:
90
+ - task_id (string): The task ID to update (required)
91
+ - name (string): Task name (optional)
92
+
93
+ Returns:
94
+ The updated task.`,
95
+ delete: `Delete a task from Holded Projects.
96
+
97
+ Args:
98
+ - task_id (string): The task ID to delete (required)
99
+
100
+ Returns:
101
+ Confirmation of deletion.`,
102
+ },
103
+ formatters: {
104
+ list: formatTasksMarkdown,
105
+ single: formatTaskMarkdown,
106
+ },
107
+ listQueryParams: (params) => {
108
+ const qp = {};
109
+ if (params.project_id)
110
+ qp.projectId = params.project_id;
111
+ return qp;
112
+ },
113
+ });
114
+ // ── Manual tool (needs snake_to_camel conversion) ───────
115
+ // Create Task
116
+ server.registerTool("holded_projects_create_task", {
117
+ title: "Create Holded Task",
118
+ description: `Create a new task in Holded Projects.
119
+
120
+ According to Holded Projects API v1.2, task creation requires:
121
+ - name (string): Task name (required)
122
+ - project_id (string): Project ID to associate the task with (required)
123
+ - list_id (string): Task list/column ID within the project (required). Get available listIds from the project details.
124
+
125
+ Returns:
126
+ The created task with its assigned ID.`,
127
+ inputSchema: CreateTaskInputSchema,
128
+ annotations: {
129
+ readOnlyHint: false,
130
+ destructiveHint: false,
131
+ idempotentHint: false,
132
+ openWorldHint: true,
133
+ },
134
+ }, withErrorHandling(async (params) => {
135
+ const { project_id, list_id, name } = params;
136
+ // Transform snake_case to camelCase for API
137
+ const requestData = {
138
+ name,
139
+ projectId: project_id,
140
+ listId: list_id,
141
+ };
142
+ const task = await makeApiRequest("projects", "tasks", "POST", requestData);
143
+ return {
144
+ content: [
145
+ {
146
+ type: "text",
147
+ text: `Task created successfully.\n\n${JSON.stringify(task, null, 2)}`,
148
+ },
149
+ ],
150
+ structuredContent: toStructuredContent(task),
151
+ };
152
+ }));
153
+ }
154
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/tools/projects/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Project Time Tracking tools for Holded API
3
+ */
4
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ import { TimeTracking } from "../../types.js";
6
+ /**
7
+ * Format project time-trackings as markdown
8
+ */
9
+ export declare function formatProjectTimeTrackingsMarkdown(times: TimeTracking[]): string;
10
+ /**
11
+ * Register all project time-tracking-related tools
12
+ */
13
+ export declare function registerProjectTimeTrackingTools(server: McpServer): void;
14
+ //# sourceMappingURL=time-tracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-tracking.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/time-tracking.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAiB9C;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAoBhF;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoUxE"}