@frihet/mcp-server 1.7.0-beta.1 → 1.12.0-beta.1

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 (141) hide show
  1. package/README.md +262 -12
  2. package/dist/__tests__/banking-tools.test.d.ts +18 -0
  3. package/dist/__tests__/banking-tools.test.d.ts.map +1 -0
  4. package/dist/__tests__/banking-tools.test.js +252 -0
  5. package/dist/__tests__/banking-tools.test.js.map +1 -0
  6. package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.d.ts +13 -0
  7. package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.d.ts.map +1 -0
  8. package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js +420 -0
  9. package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js.map +1 -0
  10. package/dist/__tests__/einvoice-day4-tools.test.d.ts +16 -0
  11. package/dist/__tests__/einvoice-day4-tools.test.d.ts.map +1 -0
  12. package/dist/__tests__/einvoice-day4-tools.test.js +377 -0
  13. package/dist/__tests__/einvoice-day4-tools.test.js.map +1 -0
  14. package/dist/__tests__/einvoice-tools.test.d.ts +1 -1
  15. package/dist/__tests__/einvoice-tools.test.js +25 -12
  16. package/dist/__tests__/einvoice-tools.test.js.map +1 -1
  17. package/dist/__tests__/fiscal-tools.test.d.ts +21 -0
  18. package/dist/__tests__/fiscal-tools.test.d.ts.map +1 -0
  19. package/dist/__tests__/fiscal-tools.test.js +215 -0
  20. package/dist/__tests__/fiscal-tools.test.js.map +1 -0
  21. package/dist/__tests__/pos-tools.test.d.ts +16 -0
  22. package/dist/__tests__/pos-tools.test.d.ts.map +1 -0
  23. package/dist/__tests__/pos-tools.test.js +244 -0
  24. package/dist/__tests__/pos-tools.test.js.map +1 -0
  25. package/dist/__tests__/recurring-tools.test.d.ts +23 -0
  26. package/dist/__tests__/recurring-tools.test.d.ts.map +1 -0
  27. package/dist/__tests__/recurring-tools.test.js +352 -0
  28. package/dist/__tests__/recurring-tools.test.js.map +1 -0
  29. package/dist/__tests__/stay-tools.test.d.ts +17 -0
  30. package/dist/__tests__/stay-tools.test.d.ts.map +1 -0
  31. package/dist/__tests__/stay-tools.test.js +259 -0
  32. package/dist/__tests__/stay-tools.test.js.map +1 -0
  33. package/dist/__tests__/team-tools.test.d.ts +18 -0
  34. package/dist/__tests__/team-tools.test.d.ts.map +1 -0
  35. package/dist/__tests__/team-tools.test.js +228 -0
  36. package/dist/__tests__/team-tools.test.js.map +1 -0
  37. package/dist/__tests__/time-tools.test.d.ts +19 -0
  38. package/dist/__tests__/time-tools.test.d.ts.map +1 -0
  39. package/dist/__tests__/time-tools.test.js +286 -0
  40. package/dist/__tests__/time-tools.test.js.map +1 -0
  41. package/dist/client-interface.d.ts +325 -0
  42. package/dist/client-interface.d.ts.map +1 -1
  43. package/dist/client.d.ts +325 -0
  44. package/dist/client.d.ts.map +1 -1
  45. package/dist/client.js +404 -0
  46. package/dist/client.js.map +1 -1
  47. package/dist/index.js +4 -4
  48. package/dist/index.js.map +1 -1
  49. package/dist/tools/accountingClose.d.ts +20 -0
  50. package/dist/tools/accountingClose.d.ts.map +1 -0
  51. package/dist/tools/accountingClose.js +119 -0
  52. package/dist/tools/accountingClose.js.map +1 -0
  53. package/dist/tools/audit_gl.d.ts +19 -0
  54. package/dist/tools/audit_gl.d.ts.map +1 -0
  55. package/dist/tools/audit_gl.js +86 -0
  56. package/dist/tools/audit_gl.js.map +1 -0
  57. package/dist/tools/bank_rules.d.ts +23 -0
  58. package/dist/tools/bank_rules.d.ts.map +1 -0
  59. package/dist/tools/bank_rules.js +96 -0
  60. package/dist/tools/bank_rules.js.map +1 -0
  61. package/dist/tools/banking.d.ts +19 -0
  62. package/dist/tools/banking.d.ts.map +1 -0
  63. package/dist/tools/banking.js +155 -0
  64. package/dist/tools/banking.js.map +1 -0
  65. package/dist/tools/einvoice.d.ts +70 -3
  66. package/dist/tools/einvoice.d.ts.map +1 -1
  67. package/dist/tools/einvoice.js +421 -3
  68. package/dist/tools/einvoice.js.map +1 -1
  69. package/dist/tools/fiscal.d.ts +23 -0
  70. package/dist/tools/fiscal.d.ts.map +1 -0
  71. package/dist/tools/fiscal.js +197 -0
  72. package/dist/tools/fiscal.js.map +1 -0
  73. package/dist/tools/gestoria.d.ts +28 -0
  74. package/dist/tools/gestoria.d.ts.map +1 -0
  75. package/dist/tools/gestoria.js +248 -0
  76. package/dist/tools/gestoria.js.map +1 -0
  77. package/dist/tools/hr.d.ts +24 -0
  78. package/dist/tools/hr.d.ts.map +1 -0
  79. package/dist/tools/hr.js +219 -0
  80. package/dist/tools/hr.js.map +1 -0
  81. package/dist/tools/igic.d.ts +19 -0
  82. package/dist/tools/igic.d.ts.map +1 -0
  83. package/dist/tools/igic.js +102 -0
  84. package/dist/tools/igic.js.map +1 -0
  85. package/dist/tools/impuesto_sociedades.d.ts +18 -0
  86. package/dist/tools/impuesto_sociedades.d.ts.map +1 -0
  87. package/dist/tools/impuesto_sociedades.js +64 -0
  88. package/dist/tools/impuesto_sociedades.js.map +1 -0
  89. package/dist/tools/onboard_vies.d.ts +22 -0
  90. package/dist/tools/onboard_vies.d.ts.map +1 -0
  91. package/dist/tools/onboard_vies.js +74 -0
  92. package/dist/tools/onboard_vies.js.map +1 -0
  93. package/dist/tools/onboarding.d.ts +19 -0
  94. package/dist/tools/onboarding.d.ts.map +1 -0
  95. package/dist/tools/onboarding.js +63 -0
  96. package/dist/tools/onboarding.js.map +1 -0
  97. package/dist/tools/payroll.d.ts +20 -0
  98. package/dist/tools/payroll.d.ts.map +1 -0
  99. package/dist/tools/payroll.js +73 -0
  100. package/dist/tools/payroll.js.map +1 -0
  101. package/dist/tools/permissions.d.ts +19 -0
  102. package/dist/tools/permissions.d.ts.map +1 -0
  103. package/dist/tools/permissions.js +52 -0
  104. package/dist/tools/permissions.js.map +1 -0
  105. package/dist/tools/portal_domain.d.ts +19 -0
  106. package/dist/tools/portal_domain.d.ts.map +1 -0
  107. package/dist/tools/portal_domain.js +85 -0
  108. package/dist/tools/portal_domain.js.map +1 -0
  109. package/dist/tools/pos.d.ts +15 -0
  110. package/dist/tools/pos.d.ts.map +1 -0
  111. package/dist/tools/pos.js +156 -0
  112. package/dist/tools/pos.js.map +1 -0
  113. package/dist/tools/recurring.d.ts +21 -0
  114. package/dist/tools/recurring.d.ts.map +1 -0
  115. package/dist/tools/recurring.js +239 -0
  116. package/dist/tools/recurring.js.map +1 -0
  117. package/dist/tools/register-all.d.ts +2 -2
  118. package/dist/tools/register-all.d.ts.map +1 -1
  119. package/dist/tools/register-all.js +53 -3
  120. package/dist/tools/register-all.js.map +1 -1
  121. package/dist/tools/shared.d.ts +481 -0
  122. package/dist/tools/shared.d.ts.map +1 -1
  123. package/dist/tools/shared.js +396 -0
  124. package/dist/tools/shared.js.map +1 -1
  125. package/dist/tools/stay.d.ts +6 -78
  126. package/dist/tools/stay.d.ts.map +1 -1
  127. package/dist/tools/stay.js +121 -343
  128. package/dist/tools/stay.js.map +1 -1
  129. package/dist/tools/team.d.ts +17 -0
  130. package/dist/tools/team.d.ts.map +1 -0
  131. package/dist/tools/team.js +141 -0
  132. package/dist/tools/team.js.map +1 -0
  133. package/dist/tools/time.d.ts +19 -0
  134. package/dist/tools/time.d.ts.map +1 -0
  135. package/dist/tools/time.js +179 -0
  136. package/dist/tools/time.js.map +1 -0
  137. package/dist/tools/webhooks.d.ts.map +1 -1
  138. package/dist/tools/webhooks.js +27 -1
  139. package/dist/tools/webhooks.js.map +1 -1
  140. package/package.json +12 -5
  141. package/scripts/audit-mcp-refs.mjs +331 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Team management tools for the Frihet MCP server — Wave Mature 3 (4 tools).
3
+ *
4
+ * Tools:
5
+ * 1. list_team_members — list all members in the workspace
6
+ * 2. invite_team_member — invite a new member by email with a role
7
+ * 3. update_team_member_role — change the role of an existing member
8
+ * 4. remove_team_member — remove a member from the workspace (Trust Area)
9
+ *
10
+ * REST surface: /v1/team/members
11
+ *
12
+ * Backend: /v1/team/* endpoints live as of Wave 4-A (Frihet-ERP functions/src/publicApi.ts).
13
+ */
14
+ import { z } from "zod/v4";
15
+ import { withToolLogging, formatPaginatedResponse, formatRecord, listContent, mutateContent, READ_ONLY_ANNOTATIONS, CREATE_ANNOTATIONS, UPDATE_ANNOTATIONS, DELETE_ANNOTATIONS, paginatedOutput, actionResultOutput, teamMemberItemOutput, } from "./shared.js";
16
+ export function registerTeamTools(server, client) {
17
+ // -- list_team_members --
18
+ server.registerTool("list_team_members", {
19
+ title: "List Team Members",
20
+ description: "List all members in the workspace. " +
21
+ "Returns member ID, name, email, role, and invite status (pending/active). " +
22
+ "Useful for access management and auditing who has access to the account. " +
23
+ "/ Lista todos los miembros del espacio de trabajo. " +
24
+ "Devuelve ID, nombre, email, rol y estado de invitacion (pendiente/activo). " +
25
+ "Util para gestion de accesos y auditoria de quien tiene acceso a la cuenta.",
26
+ annotations: READ_ONLY_ANNOTATIONS,
27
+ inputSchema: {
28
+ role: z
29
+ .enum(["owner", "admin", "member", "viewer"])
30
+ .optional()
31
+ .describe("Filter by role / Filtrar por rol"),
32
+ status: z
33
+ .enum(["active", "pending"])
34
+ .optional()
35
+ .describe("Filter by invite status / Filtrar por estado de invitacion"),
36
+ limit: z.number().int().min(1).max(100).optional().describe("Max results (1-100) / Resultados maximos"),
37
+ offset: z.number().int().min(0).optional().describe("Offset / Desplazamiento"),
38
+ },
39
+ outputSchema: paginatedOutput(teamMemberItemOutput),
40
+ }, async ({ role, status, limit, offset }) => withToolLogging("list_team_members", async () => {
41
+ const result = await client.listTeamMembers({ role, status, limit, offset });
42
+ return {
43
+ content: [listContent(formatPaginatedResponse("team_members", result))],
44
+ structuredContent: result,
45
+ };
46
+ }));
47
+ // -- invite_team_member --
48
+ server.registerTool("invite_team_member", {
49
+ title: "Invite Team Member",
50
+ description: "Invite a new member to the workspace by email address. " +
51
+ "An invitation email is sent — the member must accept before gaining access. " +
52
+ "Roles: owner (full access), admin (manage account, no billing), member (operational access), viewer (read-only). " +
53
+ "Example: email='ana@example.com', role='member' " +
54
+ "/ Invita a un nuevo miembro al espacio de trabajo por correo electronico. " +
55
+ "Se envia un email de invitacion — el miembro debe aceptar antes de acceder. " +
56
+ "Roles: owner (acceso total), admin (gestion sin facturacion), member (acceso operativo), viewer (solo lectura).",
57
+ annotations: CREATE_ANNOTATIONS,
58
+ inputSchema: {
59
+ email: z.string().email().describe("Email address of the invitee / Email del invitado"),
60
+ role: z
61
+ .enum(["admin", "member", "viewer"])
62
+ .describe("Role to assign (owner cannot be invited, must be transferred) / Rol a asignar (owner no se puede invitar, debe transferirse)"),
63
+ name: z
64
+ .string()
65
+ .optional()
66
+ .describe("Display name for the invitation (optional) / Nombre para la invitacion (opcional)"),
67
+ },
68
+ outputSchema: teamMemberItemOutput,
69
+ }, async ({ email, role, name }) => withToolLogging("invite_team_member", async () => {
70
+ const result = await client.inviteTeamMember({ email, role, name });
71
+ return {
72
+ content: [mutateContent(formatRecord("Team member invited", result))],
73
+ structuredContent: result,
74
+ };
75
+ }));
76
+ // -- update_team_member_role --
77
+ server.registerTool("update_team_member_role", {
78
+ title: "Update Team Member Role",
79
+ description: "Change the role of an existing team member. " +
80
+ "Only workspace admins or owners can change roles. " +
81
+ "Cannot change the owner's role — use a dedicated ownership transfer flow. " +
82
+ "Example: memberId='mbr_abc123', role='admin' " +
83
+ "/ Cambia el rol de un miembro existente del espacio de trabajo. " +
84
+ "Solo administradores o propietarios pueden cambiar roles. " +
85
+ "No se puede cambiar el rol del propietario — usa el flujo de transferencia de propiedad.",
86
+ annotations: UPDATE_ANNOTATIONS,
87
+ inputSchema: {
88
+ memberId: z.string().describe("Team member ID / ID del miembro del equipo"),
89
+ role: z
90
+ .enum(["admin", "member", "viewer"])
91
+ .describe("New role to assign / Nuevo rol a asignar"),
92
+ },
93
+ outputSchema: actionResultOutput,
94
+ }, async ({ memberId, role }) => withToolLogging("update_team_member_role", async () => {
95
+ const result = await client.updateTeamMemberRole(memberId, role);
96
+ return {
97
+ content: [mutateContent(formatRecord("Team member role updated", result))],
98
+ structuredContent: result,
99
+ };
100
+ }));
101
+ // -- remove_team_member --
102
+ server.registerTool("remove_team_member", {
103
+ title: "Remove Team Member",
104
+ description: "Remove a member from the workspace. " +
105
+ "The member immediately loses access. Their created records (invoices, expenses) are preserved. " +
106
+ "Cannot remove the workspace owner — transfer ownership first. " +
107
+ "Requires confirm=true to prevent accidental removal. " +
108
+ "/ Elimina un miembro del espacio de trabajo. " +
109
+ "El miembro pierde acceso inmediatamente. Sus registros creados (facturas, gastos) se conservan. " +
110
+ "No se puede eliminar al propietario — transfiere la propiedad primero. " +
111
+ "Requiere confirm=true para evitar eliminaciones accidentales.",
112
+ annotations: DELETE_ANNOTATIONS,
113
+ inputSchema: {
114
+ memberId: z.string().describe("Team member ID / ID del miembro del equipo"),
115
+ confirm: z
116
+ .boolean()
117
+ .describe("Must be true to confirm removal / Debe ser true para confirmar la eliminacion"),
118
+ },
119
+ outputSchema: actionResultOutput,
120
+ }, async ({ memberId, confirm }) => withToolLogging("remove_team_member", async () => {
121
+ if (!confirm) {
122
+ return {
123
+ content: [
124
+ {
125
+ type: "text",
126
+ text: "Error: confirm=true is required to remove a team member. " +
127
+ "The member will immediately lose access to the workspace. Set confirm=true to proceed. / " +
128
+ "Se requiere confirm=true para eliminar un miembro del equipo.",
129
+ },
130
+ ],
131
+ isError: true,
132
+ };
133
+ }
134
+ await client.removeTeamMember(memberId);
135
+ return {
136
+ content: [mutateContent(`Team member ${memberId} removed from workspace. / Miembro ${memberId} eliminado del espacio de trabajo.`)],
137
+ structuredContent: { success: true, id: memberId },
138
+ };
139
+ }));
140
+ }
141
+ //# sourceMappingURL=team.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/tools/team.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Time tracking tools for the Frihet MCP server — Wave Mature 3 (6 tools).
3
+ *
4
+ * Tools:
5
+ * 1. list_time_entries — list timesheets (filter: user, project, date range)
6
+ * 2. get_time_entry — get a single time entry by ID
7
+ * 3. create_time_entry — log time (project, hours, description, billable flag)
8
+ * 4. update_time_entry — modify existing time entry
9
+ * 5. delete_time_entry — soft delete (Trust Area: requires confirm)
10
+ * 6. get_time_summary — aggregate hours/cost by workspace or member
11
+ *
12
+ * REST surface: /v1/time/entries, /v1/time/summary
13
+ *
14
+ * Backend: /v1/time/* endpoints live as of Wave 4-A (Frihet-ERP functions/src/publicApi.ts).
15
+ */
16
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
17
+ import type { IFrihetClient } from "../client-interface.js";
18
+ export declare function registerTimeTools(server: McpServer, client: IFrihetClient): void;
19
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/tools/time.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAiB5D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA4MhF"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Time tracking tools for the Frihet MCP server — Wave Mature 3 (6 tools).
3
+ *
4
+ * Tools:
5
+ * 1. list_time_entries — list timesheets (filter: user, project, date range)
6
+ * 2. get_time_entry — get a single time entry by ID
7
+ * 3. create_time_entry — log time (project, hours, description, billable flag)
8
+ * 4. update_time_entry — modify existing time entry
9
+ * 5. delete_time_entry — soft delete (Trust Area: requires confirm)
10
+ * 6. get_time_summary — aggregate hours/cost by workspace or member
11
+ *
12
+ * REST surface: /v1/time/entries, /v1/time/summary
13
+ *
14
+ * Backend: /v1/time/* endpoints live as of Wave 4-A (Frihet-ERP functions/src/publicApi.ts).
15
+ */
16
+ import { z } from "zod/v4";
17
+ import { withToolLogging, formatPaginatedResponse, formatRecord, listContent, getContent, mutateContent, READ_ONLY_ANNOTATIONS, CREATE_ANNOTATIONS, UPDATE_ANNOTATIONS, paginatedOutput, deleteResultOutput, timeEntryItemOutput, timeSummaryOutput, } from "./shared.js";
18
+ export function registerTimeTools(server, client) {
19
+ // -- list_time_entries --
20
+ server.registerTool("list_time_entries", {
21
+ title: "List Time Entries",
22
+ description: "List time tracking entries with optional filters. " +
23
+ "Filter by user, project, date range, or billable status. " +
24
+ "Useful for generating timesheets, billing reports, and project cost analysis. " +
25
+ "/ Lista entradas de tiempo con filtros opcionales. " +
26
+ "Filtra por usuario, proyecto, rango de fechas o facturabilidad. " +
27
+ "Util para partes de trabajo, informes de facturacion y analisis de costes por proyecto.",
28
+ annotations: READ_ONLY_ANNOTATIONS,
29
+ inputSchema: {
30
+ userId: z.string().optional().describe("Filter by user ID / Filtrar por ID de usuario"),
31
+ projectId: z.string().optional().describe("Filter by project ID / Filtrar por ID de proyecto"),
32
+ from: z.string().optional().describe("Start date ISO 8601 (YYYY-MM-DD) / Fecha inicio"),
33
+ to: z.string().optional().describe("End date ISO 8601 (YYYY-MM-DD) / Fecha fin"),
34
+ billable: z.boolean().optional().describe("Filter by billable flag / Filtrar por facturabilidad"),
35
+ limit: z.number().int().min(1).max(100).optional().describe("Max results (1-100) / Resultados maximos"),
36
+ offset: z.number().int().min(0).optional().describe("Offset / Desplazamiento"),
37
+ after: z.string().optional().describe("Cursor for cursor-based pagination / Cursor para paginacion"),
38
+ },
39
+ outputSchema: paginatedOutput(timeEntryItemOutput),
40
+ }, async ({ userId, projectId, from, to, billable, limit, offset, after }) => withToolLogging("list_time_entries", async () => {
41
+ const result = await client.listTimeEntries({ userId, projectId, from, to, billable, limit, offset, after });
42
+ return {
43
+ content: [listContent(formatPaginatedResponse("time_entries", result))],
44
+ structuredContent: result,
45
+ };
46
+ }));
47
+ // -- get_time_entry --
48
+ server.registerTool("get_time_entry", {
49
+ title: "Get Time Entry",
50
+ description: "Get full details of a single time tracking entry by ID. " +
51
+ "Returns project, user, hours, description, billable flag, date and status. " +
52
+ "/ Obtiene los detalles completos de una entrada de tiempo por su ID. " +
53
+ "Devuelve proyecto, usuario, horas, descripcion, facturabilidad, fecha y estado.",
54
+ annotations: READ_ONLY_ANNOTATIONS,
55
+ inputSchema: {
56
+ id: z.string().describe("Time entry ID / ID de la entrada de tiempo"),
57
+ },
58
+ outputSchema: timeEntryItemOutput,
59
+ }, async ({ id }) => withToolLogging("get_time_entry", async () => {
60
+ const result = await client.getTimeEntry(id);
61
+ return {
62
+ content: [getContent(formatRecord("Time entry", result))],
63
+ structuredContent: result,
64
+ };
65
+ }));
66
+ // -- create_time_entry --
67
+ server.registerTool("create_time_entry", {
68
+ title: "Create Time Entry",
69
+ description: "Log a time entry for a project. " +
70
+ "Requires projectId, hours (decimal), and date. " +
71
+ "Mark as billable=true to include in client invoicing. " +
72
+ "Example: projectId='proj_abc', hours=2.5, description='Frontend review', billable=true, date='2026-05-10' " +
73
+ "/ Registra una entrada de tiempo para un proyecto. " +
74
+ "Requiere projectId, horas (decimal) y fecha. " +
75
+ "Marca billable=true para incluirlo en la facturacion al cliente.",
76
+ annotations: CREATE_ANNOTATIONS,
77
+ inputSchema: {
78
+ projectId: z.string().describe("Project ID / ID del proyecto"),
79
+ hours: z.number().min(0.01).describe("Hours worked (decimal, e.g. 1.5) / Horas trabajadas (decimal)"),
80
+ date: z.string().describe("Work date ISO 8601 (YYYY-MM-DD) / Fecha del trabajo"),
81
+ description: z.string().optional().describe("Description of work done / Descripcion del trabajo realizado"),
82
+ billable: z.boolean().optional().describe("Whether hours are billable to client (default true) / Si las horas son facturables"),
83
+ userId: z.string().optional().describe("User ID (defaults to API key owner) / ID del usuario (por defecto el propietario de la API key)"),
84
+ },
85
+ outputSchema: timeEntryItemOutput,
86
+ }, async ({ projectId, hours, date, description, billable, userId }) => withToolLogging("create_time_entry", async () => {
87
+ const result = await client.createTimeEntry({ projectId, hours, date, description, billable, userId });
88
+ return {
89
+ content: [mutateContent(formatRecord("Time entry created", result))],
90
+ structuredContent: result,
91
+ };
92
+ }));
93
+ // -- update_time_entry --
94
+ server.registerTool("update_time_entry", {
95
+ title: "Update Time Entry",
96
+ description: "Update an existing time entry using PATCH semantics. Only provided fields are changed. " +
97
+ "Example: id='te_abc123', hours=3.0, description='Frontend review + testing' " +
98
+ "/ Actualiza una entrada de tiempo existente. Solo se modifican los campos proporcionados.",
99
+ annotations: UPDATE_ANNOTATIONS,
100
+ inputSchema: {
101
+ id: z.string().describe("Time entry ID / ID de la entrada de tiempo"),
102
+ hours: z.number().min(0.01).optional().describe("Updated hours / Horas actualizadas"),
103
+ date: z.string().optional().describe("Updated date ISO 8601 / Fecha actualizada"),
104
+ description: z.string().optional().describe("Updated description / Descripcion actualizada"),
105
+ billable: z.boolean().optional().describe("Updated billable flag / Facturabilidad actualizada"),
106
+ projectId: z.string().optional().describe("Reassign to different project / Reasignar a otro proyecto"),
107
+ },
108
+ outputSchema: timeEntryItemOutput,
109
+ }, async ({ id, ...data }) => withToolLogging("update_time_entry", async () => {
110
+ const result = await client.updateTimeEntry(id, data);
111
+ return {
112
+ content: [mutateContent(formatRecord("Time entry updated", result))],
113
+ structuredContent: result,
114
+ };
115
+ }));
116
+ // -- delete_time_entry --
117
+ server.registerTool("delete_time_entry", {
118
+ title: "Delete Time Entry",
119
+ description: "Soft-delete a time entry by ID. " +
120
+ "Requires confirm=true to prevent accidental deletion. " +
121
+ "Deleted entries are excluded from billing reports but retained for audit. " +
122
+ "/ Elimina (soft-delete) una entrada de tiempo por su ID. " +
123
+ "Requiere confirm=true para evitar eliminaciones accidentales. " +
124
+ "Las entradas eliminadas se excluyen de informes de facturacion pero se retienen en auditoria.",
125
+ annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: false },
126
+ inputSchema: {
127
+ id: z.string().describe("Time entry ID / ID de la entrada de tiempo"),
128
+ confirm: z
129
+ .boolean()
130
+ .describe("Must be true to confirm deletion / Debe ser true para confirmar la eliminacion"),
131
+ },
132
+ outputSchema: deleteResultOutput,
133
+ }, async ({ id, confirm }) => withToolLogging("delete_time_entry", async () => {
134
+ if (!confirm) {
135
+ return {
136
+ content: [
137
+ {
138
+ type: "text",
139
+ text: "Error: confirm=true is required to delete a time entry. " +
140
+ "Deleted entries affect billing reports. Set confirm=true to proceed. / " +
141
+ "Se requiere confirm=true para eliminar una entrada de tiempo.",
142
+ },
143
+ ],
144
+ isError: true,
145
+ };
146
+ }
147
+ await client.deleteTimeEntry(id);
148
+ return {
149
+ content: [mutateContent(`Time entry ${id} deleted (soft). / Entrada de tiempo ${id} eliminada.`)],
150
+ structuredContent: { success: true, id },
151
+ };
152
+ }));
153
+ // -- get_time_summary --
154
+ server.registerTool("get_time_summary", {
155
+ title: "Get Time Summary",
156
+ description: "Get aggregated time tracking summary for a workspace or specific team member. " +
157
+ "Returns total hours, billable hours, non-billable hours, and estimated cost for the period. " +
158
+ "Filter by date range and optionally by user ID for per-member breakdowns. " +
159
+ "/ Obtiene el resumen agregado de seguimiento de tiempo para el espacio de trabajo o un miembro. " +
160
+ "Devuelve horas totales, facturables, no facturables y coste estimado del periodo. " +
161
+ "Filtra por rango de fechas y opcionalmente por usuario para desglose por miembro.",
162
+ annotations: READ_ONLY_ANNOTATIONS,
163
+ inputSchema: {
164
+ from: z.string().describe("Start date ISO 8601 (YYYY-MM-DD) / Fecha inicio"),
165
+ to: z.string().describe("End date ISO 8601 (YYYY-MM-DD) / Fecha fin"),
166
+ userId: z.string().optional().describe("Filter to a specific member (omit for workspace total) / Filtrar a un miembro concreto (omitir para total workspace)"),
167
+ projectId: z.string().optional().describe("Filter to a specific project / Filtrar a un proyecto concreto"),
168
+ groupBy: z.enum(["user", "project", "day"]).optional().describe("Group results by user, project, or day (default: no grouping) / Agrupar resultados por usuario, proyecto o dia"),
169
+ },
170
+ outputSchema: timeSummaryOutput,
171
+ }, async ({ from, to, userId, projectId, groupBy }) => withToolLogging("get_time_summary", async () => {
172
+ const result = await client.getTimeSummary({ from, to, userId, projectId, groupBy });
173
+ return {
174
+ content: [getContent(formatRecord("Time summary", result))],
175
+ structuredContent: result,
176
+ };
177
+ }));
178
+ }
179
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/tools/time.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAoJnF"}
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAqLnF"}
@@ -2,7 +2,7 @@
2
2
  * Webhook management tools for the Frihet MCP server.
3
3
  */
4
4
  import { z } from "zod/v4";
5
- import { withToolLogging, formatPaginatedResponse, formatRecord, listContent, getContent, mutateContent, READ_ONLY_ANNOTATIONS, CREATE_ANNOTATIONS, UPDATE_ANNOTATIONS, DELETE_ANNOTATIONS, paginatedOutput, deleteResultOutput, webhookItemOutput } from "./shared.js";
5
+ import { withToolLogging, formatPaginatedResponse, formatRecord, listContent, getContent, mutateContent, READ_ONLY_ANNOTATIONS, CREATE_ANNOTATIONS, UPDATE_ANNOTATIONS, DELETE_ANNOTATIONS, paginatedOutput, deleteResultOutput, webhookItemOutput, webhookTestResultOutput } from "./shared.js";
6
6
  export function registerWebhookTools(server, client) {
7
7
  // -- list_webhooks --
8
8
  server.registerTool("list_webhooks", {
@@ -113,5 +113,31 @@ export function registerWebhookTools(server, client) {
113
113
  structuredContent: { success: true, id },
114
114
  };
115
115
  }));
116
+ // -- test_webhook --
117
+ // D4-B megasprint: fire a synthetic event to verify endpoint reachability + signature validation.
118
+ server.registerTool("test_webhook", {
119
+ title: "Test Webhook",
120
+ description: "Fire a synthetic test event to the webhook endpoint and return the delivery result. " +
121
+ "Useful to verify endpoint reachability, signature validation, and TLS configuration. " +
122
+ "Optionally specify the eventType to simulate (default: 'webhook.test'). " +
123
+ "Example: id='wh_abc', eventType='invoice.paid' " +
124
+ "/ Envia un evento de prueba sintetico al endpoint del webhook. " +
125
+ "Util para verificar accesibilidad, validacion de firma y configuracion TLS.",
126
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
127
+ inputSchema: {
128
+ id: z.string().describe("Webhook ID / ID del webhook"),
129
+ eventType: z
130
+ .string()
131
+ .optional()
132
+ .describe("Event type to simulate (default: 'webhook.test') / Tipo de evento a simular"),
133
+ },
134
+ outputSchema: webhookTestResultOutput,
135
+ }, async ({ id, eventType }) => withToolLogging("test_webhook", async () => {
136
+ const result = await client.testWebhook(id, { eventType });
137
+ return {
138
+ content: [mutateContent(formatRecord("Webhook test", result))],
139
+ structuredContent: result,
140
+ };
141
+ }));
116
142
  }
117
143
  //# sourceMappingURL=webhooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@frihet/mcp-server",
3
- "version": "1.7.0-beta.1",
4
- "description": "AI-native MCP server for business management — invoices, expenses, deposits, clients, products, quotes, webhooks, CRM, e-invoicing. 66 tools. Remote endpoint at mcp.frihet.io (zero install). Works with Claude, Cursor, Windsurf, Cline.",
3
+ "version": "1.12.0-beta.1",
4
+ "description": "AI-native MCP server for business management — invoices, expenses, deposits, clients, products, quotes, webhooks, CRM, e-invoicing (Facturae/XRechnung/Factur-X/FatturaPA/PEPPOL + FACe Spain B2G + TicketBAI Basque Country + KSeF Poland), vacation rentals, POS, banking, fiscal (Modelo 303/130/390/180/347/415/425/418, VeriFactu, TicketBAI, IS M200/M202), IGIC, AIEM, GL audit approval, white-label portal domain, VIES EU VAT lookup, bank rules, time tracking, recurring invoices, team management, gestoria. 151 tools. Remote endpoint at mcp.frihet.io (zero install). Works with Claude, Cursor, Windsurf, Cline.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "bin": {
@@ -9,10 +9,12 @@
9
9
  },
10
10
  "scripts": {
11
11
  "build": "tsc",
12
- "test": "npm run build && node --test dist/__tests__/einvoice-tools.test.js",
12
+ "test": "npm run build && node --test dist/__tests__/einvoice-tools.test.js dist/__tests__/einvoice-day4-tools.test.js dist/__tests__/stay-tools.test.js dist/__tests__/pos-tools.test.js dist/__tests__/banking-tools.test.js dist/__tests__/fiscal-tools.test.js dist/__tests__/time-tools.test.js dist/__tests__/recurring-tools.test.js dist/__tests__/team-tools.test.js dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js",
13
13
  "start": "node dist/index.js",
14
14
  "postinstall": "node scripts/postinstall.js || true",
15
- "prepublishOnly": "npm run build"
15
+ "prepublishOnly": "npm run build && npm run audit:mcp-refs -- --repo frihet-mcp",
16
+ "audit:mcp-refs": "node scripts/audit-mcp-refs.mjs",
17
+ "audit:mcp-refs:fix": "node scripts/audit-mcp-refs.mjs --fix"
16
18
  },
17
19
  "keywords": [
18
20
  "accounting",
@@ -46,7 +48,12 @@
46
48
  "business-automation",
47
49
  "verifactu",
48
50
  "webhooks",
49
- "windsurf"
51
+ "windsurf",
52
+ "hr",
53
+ "payroll",
54
+ "vacation-rental",
55
+ "spanish-tax",
56
+ "e-invoicing"
50
57
  ],
51
58
  "author": "BRTHLS <viktor@brthls.com>",
52
59
  "license": "MIT",