@codegame.dev/careerflow-mcp 1.1.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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +398 -0
  3. package/dist/client.js +110 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/config.js +37 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/helpers.js +192 -0
  8. package/dist/helpers.js.map +1 -0
  9. package/dist/index.js +194 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/setup.js +296 -0
  12. package/dist/setup.js.map +1 -0
  13. package/dist/tools/admin.js +232 -0
  14. package/dist/tools/admin.js.map +1 -0
  15. package/dist/tools/benefit-funds.js +243 -0
  16. package/dist/tools/benefit-funds.js.map +1 -0
  17. package/dist/tools/chat-extra.js +172 -0
  18. package/dist/tools/chat-extra.js.map +1 -0
  19. package/dist/tools/chat.js +125 -0
  20. package/dist/tools/chat.js.map +1 -0
  21. package/dist/tools/cms.js +145 -0
  22. package/dist/tools/cms.js.map +1 -0
  23. package/dist/tools/crm-admin.js +269 -0
  24. package/dist/tools/crm-admin.js.map +1 -0
  25. package/dist/tools/crm.js +632 -0
  26. package/dist/tools/crm.js.map +1 -0
  27. package/dist/tools/dev-tickets.js +94 -0
  28. package/dist/tools/dev-tickets.js.map +1 -0
  29. package/dist/tools/forms.js +105 -0
  30. package/dist/tools/forms.js.map +1 -0
  31. package/dist/tools/hr.js +517 -0
  32. package/dist/tools/hr.js.map +1 -0
  33. package/dist/tools/kanban-extra.js +403 -0
  34. package/dist/tools/kanban-extra.js.map +1 -0
  35. package/dist/tools/misc.js +159 -0
  36. package/dist/tools/misc.js.map +1 -0
  37. package/dist/tools/projects.js +138 -0
  38. package/dist/tools/projects.js.map +1 -0
  39. package/dist/tools/tasks.js +342 -0
  40. package/dist/tools/tasks.js.map +1 -0
  41. package/dist/tools/time.js +129 -0
  42. package/dist/tools/time.js.map +1 -0
  43. package/dist/tools/workplace.js +110 -0
  44. package/dist/tools/workplace.js.map +1 -0
  45. package/dist/tools/workspace.js +199 -0
  46. package/dist/tools/workspace.js.map +1 -0
  47. package/package.json +61 -0
@@ -0,0 +1,243 @@
1
+ import { z } from "zod";
2
+ import { companyIdSchema, resolveCompanyId, safeHandler, textResult } from "../helpers.js";
3
+ /**
4
+ * Benefit fund tools: an employee loan and lottery fund. Money moves here —
5
+ * loan creation, status changes, and installment payments have real financial
6
+ * effect, so the write tools stay close to what the API itself allows
7
+ * self-service (registering for a lottery, accepting/declining a win,
8
+ * requesting membership) and what HR explicitly approves (updating loan
9
+ * status, paying an installment).
10
+ */
11
+ export function registerBenefitFundTools(server, client) {
12
+ server.registerTool("benefit_fund_my_dashboard", {
13
+ title: "My benefit fund dashboard",
14
+ description: "The authenticated user's benefit fund summary: membership, active loans, loan types, and any open lottery win.",
15
+ inputSchema: { company_id: companyIdSchema }
16
+ }, safeHandler(async (args) => {
17
+ const companyId = resolveCompanyId(client, args.company_id);
18
+ const response = await client.get("benefit-funds/dashboard/employee", {
19
+ company_id: companyId
20
+ });
21
+ return textResult(response.data);
22
+ }));
23
+ server.registerTool("benefit_fund_hr_dashboard", {
24
+ title: "HR benefit fund dashboard",
25
+ description: "Fund-wide stats: members, balances, active loans, pending requests, and open lotteries.",
26
+ inputSchema: { company_id: companyIdSchema }
27
+ }, safeHandler(async (args) => {
28
+ const companyId = resolveCompanyId(client, args.company_id);
29
+ const response = await client.get("benefit-funds/dashboard/hr", {
30
+ company_id: companyId
31
+ });
32
+ return textResult(response.data);
33
+ }));
34
+ server.registerTool("list_benefit_fund_loan_types", {
35
+ title: "List benefit fund loan types",
36
+ description: "List the loan types a fund offers, with their limits and eligibility rules.",
37
+ inputSchema: { company_id: companyIdSchema, is_active: z.boolean().optional() }
38
+ }, safeHandler(async (args) => {
39
+ const companyId = resolveCompanyId(client, args.company_id);
40
+ const response = await client.get("benefit-funds/loan-types/search", {
41
+ company_id: companyId,
42
+ is_active: args.is_active
43
+ });
44
+ return textResult(response.data);
45
+ }));
46
+ server.registerTool("list_benefit_fund_loans", {
47
+ title: "List benefit fund loans",
48
+ description: "List loans. Non-HR callers see only their own.",
49
+ inputSchema: {
50
+ company_id: companyIdSchema,
51
+ status: z.enum(["pending", "active", "completed", "cancelled"]).optional(),
52
+ loan_type_id: z.number().int().optional(),
53
+ user_id: z.number().int().optional().describe("HR only."),
54
+ limit: z.number().int().min(1).max(100).optional().default(20),
55
+ page: z.number().int().min(1).optional().default(1)
56
+ }
57
+ }, safeHandler(async (args) => {
58
+ const companyId = resolveCompanyId(client, args.company_id);
59
+ const response = await client.get("benefit-funds/loans/search", {
60
+ company_id: companyId,
61
+ status: args.status,
62
+ loan_type_id: args.loan_type_id,
63
+ user_id: args.user_id,
64
+ limit: args.limit,
65
+ page: args.page
66
+ });
67
+ const data = response.data ?? {};
68
+ const { loans, total, ...rest } = data;
69
+ return textResult({ count: total ?? (loans ?? []).length, loans: loans ?? [], ...rest });
70
+ }));
71
+ server.registerTool("request_benefit_fund_loan", {
72
+ title: "Request a benefit fund loan",
73
+ description: "Request a loan against a loan type. Self-requested loans start 'pending' and need HR to " +
74
+ "activate them; an HR caller passing user_id creates an already-'active' loan directly.",
75
+ inputSchema: {
76
+ company_id: companyIdSchema,
77
+ loan_type_id: z.number().int(),
78
+ installment_count: z.number().int().min(1),
79
+ amount: z.number().int().min(1),
80
+ user_id: z.number().int().optional().describe("HR only: whose loan this is. Defaults to the caller."),
81
+ start_date: z.string().optional(),
82
+ notes: z.string().optional()
83
+ }
84
+ }, safeHandler(async (args) => {
85
+ const companyId = resolveCompanyId(client, args.company_id);
86
+ const response = await client.post("benefit-funds/loans/create", {
87
+ company_id: companyId,
88
+ loan_type_id: args.loan_type_id,
89
+ installment_count: args.installment_count,
90
+ amount: args.amount,
91
+ user_id: args.user_id,
92
+ start_date: args.start_date,
93
+ notes: args.notes
94
+ });
95
+ return textResult({ created: true, loan: response.data });
96
+ }));
97
+ server.registerTool("update_benefit_fund_loan_status", {
98
+ title: "Update a benefit fund loan's status",
99
+ description: "HR: activate or cancel a loan. A non-HR caller may only cancel their own pending loan. This " +
100
+ "changes a real financial commitment — confirm with the caller first.",
101
+ inputSchema: {
102
+ company_id: companyIdSchema,
103
+ loan_id: z.number().int(),
104
+ status: z.enum(["active", "cancelled"])
105
+ }
106
+ }, safeHandler(async (args) => {
107
+ const companyId = resolveCompanyId(client, args.company_id);
108
+ const response = await client.post("benefit-funds/loans/update-status", {
109
+ company_id: companyId,
110
+ id: args.loan_id,
111
+ status: args.status
112
+ });
113
+ return textResult({ updated: true, loan: response.data });
114
+ }));
115
+ server.registerTool("pay_benefit_fund_loan_installment", {
116
+ title: "Pay a benefit fund loan installment",
117
+ description: "HR: record one installment payment on an active loan. The loan completes automatically " +
118
+ "once all installments are paid. This records a real payment — confirm before calling.",
119
+ inputSchema: { company_id: companyIdSchema, loan_id: z.number().int() }
120
+ }, safeHandler(async (args) => {
121
+ const companyId = resolveCompanyId(client, args.company_id);
122
+ const response = await client.post("benefit-funds/loans/pay-installment", {
123
+ company_id: companyId,
124
+ id: args.loan_id
125
+ });
126
+ return textResult({ paid: true, loan: response.data });
127
+ }));
128
+ server.registerTool("list_benefit_fund_lotteries", {
129
+ title: "List benefit fund lotteries",
130
+ description: "List loan lotteries. A non-HR caller sees only open lotteries, their own past entries, and " +
131
+ "any pending win awaiting their response.",
132
+ inputSchema: {
133
+ company_id: companyIdSchema,
134
+ status: z.enum(["draft", "open", "closed", "drawn", "completed", "cancelled"]).optional(),
135
+ limit: z.number().int().min(1).max(50).optional().default(20),
136
+ page: z.number().int().min(1).optional().default(1)
137
+ }
138
+ }, safeHandler(async (args) => {
139
+ const companyId = resolveCompanyId(client, args.company_id);
140
+ const response = await client.get("benefit-funds/lotteries/search", {
141
+ company_id: companyId,
142
+ status: args.status,
143
+ limit: args.limit,
144
+ page: args.page
145
+ });
146
+ const data = response.data ?? {};
147
+ const { lotteries, total, ...rest } = data;
148
+ return textResult({ count: total ?? (lotteries ?? []).length, lotteries: lotteries ?? [], ...rest });
149
+ }));
150
+ server.registerTool("register_for_lottery", {
151
+ title: "Register or unregister for a lottery",
152
+ description: "Enter or withdraw the authenticated user from an open loan lottery.",
153
+ inputSchema: {
154
+ company_id: companyIdSchema,
155
+ lottery_id: z.number().int(),
156
+ register: z.boolean().optional().default(true)
157
+ }
158
+ }, safeHandler(async (args) => {
159
+ const companyId = resolveCompanyId(client, args.company_id);
160
+ const path = (args.register ?? true) ? "benefit-funds/lotteries/register" : "benefit-funds/lotteries/unregister";
161
+ await client.post(path, { company_id: companyId, lottery_id: args.lottery_id });
162
+ return textResult({ lottery_id: args.lottery_id, registered: args.register ?? true });
163
+ }));
164
+ server.registerTool("respond_to_lottery_win", {
165
+ title: "Accept or decline a lottery win",
166
+ description: "Accept (creating a pending loan for the win amount) or decline a lottery the caller won. " +
167
+ "Only available within the loan type's acceptance window after the draw.",
168
+ inputSchema: {
169
+ company_id: companyIdSchema,
170
+ lottery_id: z.number().int(),
171
+ accept: z.boolean(),
172
+ installment_count: z.number().int().min(1).optional().describe("Required when accepting.")
173
+ }
174
+ }, safeHandler(async (args) => {
175
+ const companyId = resolveCompanyId(client, args.company_id);
176
+ if (args.accept) {
177
+ const response = await client.post("benefit-funds/lotteries/accept-win", {
178
+ company_id: companyId,
179
+ lottery_id: args.lottery_id,
180
+ installment_count: args.installment_count
181
+ });
182
+ return textResult({ accepted: true, result: response.data });
183
+ }
184
+ const response = await client.post("benefit-funds/lotteries/decline-win", {
185
+ company_id: companyId,
186
+ lottery_id: args.lottery_id
187
+ });
188
+ return textResult({ accepted: false, lottery: response.data });
189
+ }));
190
+ server.registerTool("benefit_fund_settings", {
191
+ title: "Get benefit fund settings",
192
+ description: "Get the fund's configuration: auto-enroll, deposit amount, and lottery cycle.",
193
+ inputSchema: { company_id: companyIdSchema }
194
+ }, safeHandler(async (args) => {
195
+ const companyId = resolveCompanyId(client, args.company_id);
196
+ const response = await client.get("benefit-funds/settings", { company_id: companyId });
197
+ return textResult(response.data);
198
+ }));
199
+ server.registerTool("list_benefit_fund_membership_requests", {
200
+ title: "List benefit fund membership requests",
201
+ description: "List requests to join the benefit fund. Non-HR callers see only their own.",
202
+ inputSchema: {
203
+ company_id: companyIdSchema,
204
+ status: z.enum(["pending", "approved", "rejected"]).optional()
205
+ }
206
+ }, safeHandler(async (args) => {
207
+ const companyId = resolveCompanyId(client, args.company_id);
208
+ const response = await client.get("benefit-funds/membership-requests/search", {
209
+ company_id: companyId,
210
+ status: args.status
211
+ });
212
+ return textResult(response.data);
213
+ }));
214
+ server.registerTool("request_benefit_fund_membership", {
215
+ title: "Request benefit fund membership",
216
+ description: "Ask to join the company's benefit fund. HR approval creates the membership.",
217
+ inputSchema: { company_id: companyIdSchema }
218
+ }, safeHandler(async (args) => {
219
+ const companyId = resolveCompanyId(client, args.company_id);
220
+ const response = await client.post("benefit-funds/membership-requests/create", {
221
+ company_id: companyId
222
+ });
223
+ return textResult({ created: true, request: response.data });
224
+ }));
225
+ server.registerTool("review_benefit_fund_membership_request", {
226
+ title: "Approve or reject a benefit fund membership request",
227
+ description: "HR: approve (creating a member) or reject a pending membership request.",
228
+ inputSchema: {
229
+ company_id: companyIdSchema,
230
+ request_id: z.number().int(),
231
+ approve: z.boolean(),
232
+ notes: z.string().optional().describe("Used when rejecting.")
233
+ }
234
+ }, safeHandler(async (args) => {
235
+ const companyId = resolveCompanyId(client, args.company_id);
236
+ const path = args.approve
237
+ ? `benefit-funds/membership-requests/approve/${args.request_id}`
238
+ : `benefit-funds/membership-requests/reject/${args.request_id}`;
239
+ const response = await client.post(path, { company_id: companyId, notes: args.notes });
240
+ return textResult({ approved: args.approve, result: response.data });
241
+ }));
242
+ }
243
+ //# sourceMappingURL=benefit-funds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benefit-funds.js","sourceRoot":"","sources":["../../src/tools/benefit-funds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ import { z } from "zod";
2
+ import { companyIdSchema, extractList, resolveCompanyId, safeHandler, textResult } from "../helpers.js";
3
+ /**
4
+ * Chat group management and message lifecycle tools beyond send/read in
5
+ * tools/chat.ts.
6
+ */
7
+ export function registerChatExtraTools(server, client) {
8
+ server.registerTool("create_chat_group", {
9
+ title: "Create a chat group",
10
+ description: "Create a group chat with the given members. The caller becomes the group's owner.",
11
+ inputSchema: {
12
+ company_id: companyIdSchema,
13
+ title: z.string().min(1).max(255),
14
+ description: z.string().max(2000).optional(),
15
+ member_ids: z.array(z.number().int()).optional(),
16
+ only_admins_can_send: z.boolean().optional().default(false)
17
+ }
18
+ }, safeHandler(async (args) => {
19
+ const companyId = resolveCompanyId(client, args.company_id);
20
+ const response = await client.post("chats/groups/create", {
21
+ company_id: companyId,
22
+ title: args.title,
23
+ description: args.description,
24
+ member_ids: args.member_ids?.join(","),
25
+ only_admins_can_send: args.only_admins_can_send
26
+ });
27
+ return textResult({ created: true, chat: response.data });
28
+ }));
29
+ server.registerTool("edit_chat_group", {
30
+ title: "Edit a chat group",
31
+ description: "Change a group's title, description, or posting permissions.",
32
+ inputSchema: {
33
+ company_id: companyIdSchema,
34
+ chat_id: z.number().int(),
35
+ title: z.string().max(255).optional(),
36
+ description: z.string().max(2000).optional(),
37
+ only_admins_can_send: z.boolean().optional(),
38
+ join_enabled: z.boolean().optional()
39
+ }
40
+ }, safeHandler(async (args) => {
41
+ const companyId = resolveCompanyId(client, args.company_id);
42
+ const response = await client.post("chats/groups/edit", {
43
+ company_id: companyId,
44
+ chat_id: args.chat_id,
45
+ title: args.title,
46
+ description: args.description,
47
+ only_admins_can_send: args.only_admins_can_send,
48
+ join_enabled: args.join_enabled
49
+ });
50
+ return textResult({ updated: true, chat: response.data });
51
+ }));
52
+ server.registerTool("manage_chat_group_members", {
53
+ title: "Add, edit, or remove chat group members",
54
+ description: "Add members to a group, change a member's role or send permission, or remove a member. " +
55
+ "An owner cannot be removed directly — transfer ownership first by promoting someone else.",
56
+ inputSchema: {
57
+ company_id: companyIdSchema,
58
+ chat_id: z.number().int(),
59
+ action: z.enum(["add", "edit", "remove"]),
60
+ member_ids: z.array(z.number().int()).optional().describe("Required for action 'add'."),
61
+ user_id: z.number().int().optional().describe("Required for action 'edit' or 'remove'."),
62
+ role: z.enum(["owner", "admin", "member"]).optional(),
63
+ can_send: z.boolean().optional()
64
+ }
65
+ }, safeHandler(async (args) => {
66
+ const companyId = resolveCompanyId(client, args.company_id);
67
+ if (args.action === "add") {
68
+ const response = await client.post("chats/groups/members/add", {
69
+ company_id: companyId,
70
+ chat_id: args.chat_id,
71
+ member_ids: args.member_ids?.join(",")
72
+ });
73
+ return textResult({ action: "add", result: response.data });
74
+ }
75
+ if (args.action === "edit") {
76
+ const response = await client.post("chats/groups/members/edit", {
77
+ company_id: companyId,
78
+ chat_id: args.chat_id,
79
+ user_id: args.user_id,
80
+ role: args.role,
81
+ can_send: args.can_send
82
+ });
83
+ return textResult({ action: "edit", member: response.data });
84
+ }
85
+ const response = await client.post("chats/groups/members/remove", {
86
+ company_id: companyId,
87
+ chat_id: args.chat_id,
88
+ user_id: args.user_id
89
+ });
90
+ return textResult({ action: "remove", member: response.data });
91
+ }));
92
+ server.registerTool("list_chat_group_members", {
93
+ title: "List chat group members",
94
+ description: "List the members of a group chat.",
95
+ inputSchema: {
96
+ company_id: companyIdSchema,
97
+ chat_id: z.number().int(),
98
+ search: z.string().optional(),
99
+ limit: z.number().int().min(1).max(50).optional().default(30),
100
+ page: z.number().int().min(1).optional().default(1)
101
+ }
102
+ }, safeHandler(async (args) => {
103
+ const companyId = resolveCompanyId(client, args.company_id);
104
+ const response = await client.get("chats/groups/members/search", {
105
+ company_id: companyId,
106
+ chat_id: args.chat_id,
107
+ search: args.search,
108
+ limit: args.limit,
109
+ page: args.page
110
+ });
111
+ const { items, total } = extractList(response.data, "members");
112
+ return textResult({ count: total ?? items.length, members: items });
113
+ }));
114
+ server.registerTool("leave_chat_group", {
115
+ title: "Leave a chat group",
116
+ description: "Leave a group chat. If the caller is the owner, ownership transfers automatically.",
117
+ inputSchema: { company_id: companyIdSchema, chat_id: z.number().int() }
118
+ }, safeHandler(async (args) => {
119
+ const companyId = resolveCompanyId(client, args.company_id);
120
+ await client.post("chats/groups/leave", { company_id: companyId, chat_id: args.chat_id });
121
+ return textResult({ left: true, chat_id: args.chat_id });
122
+ }));
123
+ server.registerTool("mute_chat", {
124
+ title: "Mute or unmute a chat",
125
+ description: "Mute a chat for a number of minutes (0 mutes indefinitely), or unmute it by omitting minutes.",
126
+ inputSchema: {
127
+ company_id: companyIdSchema,
128
+ chat_id: z.number().int(),
129
+ minutes: z.number().int().min(0).optional().describe("Omit to unmute.")
130
+ }
131
+ }, safeHandler(async (args) => {
132
+ const companyId = resolveCompanyId(client, args.company_id);
133
+ const response = await client.post("chats/mute", {
134
+ company_id: companyId,
135
+ chat_id: args.chat_id,
136
+ minutes: args.minutes
137
+ });
138
+ return textResult(response.data);
139
+ }));
140
+ server.registerTool("edit_chat_message", {
141
+ title: "Edit a chat message",
142
+ description: "Edit one of your own messages. Blocked once the message has been read by its recipient.",
143
+ inputSchema: { company_id: companyIdSchema, message_id: z.number().int(), content: z.string().min(1) }
144
+ }, safeHandler(async (args) => {
145
+ const companyId = resolveCompanyId(client, args.company_id);
146
+ const response = await client.post("chats/messages/edit", {
147
+ company_id: companyId,
148
+ message_id: args.message_id,
149
+ content: args.content
150
+ });
151
+ return textResult({ updated: true, message: response.data });
152
+ }));
153
+ server.registerTool("delete_chat_message", {
154
+ title: "Delete a chat message",
155
+ description: "Delete one of your own messages.",
156
+ inputSchema: { company_id: companyIdSchema, message_id: z.number().int() }
157
+ }, safeHandler(async (args) => {
158
+ const companyId = resolveCompanyId(client, args.company_id);
159
+ await client.post("chats/messages/delete", { company_id: companyId, message_id: args.message_id });
160
+ return textResult({ deleted: true, message_id: args.message_id });
161
+ }));
162
+ server.registerTool("mark_message_seen", {
163
+ title: "Mark a message as seen",
164
+ description: "Mark another person's message as read.",
165
+ inputSchema: { company_id: companyIdSchema, message_id: z.number().int() }
166
+ }, safeHandler(async (args) => {
167
+ const companyId = resolveCompanyId(client, args.company_id);
168
+ await client.post("chats/messages/seen", { company_id: companyId, message_id: args.message_id });
169
+ return textResult({ seen: true, message_id: args.message_id });
170
+ }));
171
+ }
172
+ //# sourceMappingURL=chat-extra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-extra.js","sourceRoot":"","sources":["../../src/tools/chat-extra.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { z } from "zod";
2
+ import { companyIdSchema, extractList, currentUserId, resolveCompanyId, safeHandler, textResult } from "../helpers.js";
3
+ /**
4
+ * Chat tools.
5
+ *
6
+ * `send_message` delivers a real message to real colleagues and cannot be
7
+ * recalled, so its description tells the model to confirm recipient and wording
8
+ * with the user first. The API still enforces who the caller may message.
9
+ */
10
+ export function registerChatTools(server, client) {
11
+ server.registerTool("list_chats", {
12
+ title: "List conversations",
13
+ description: "List the user's chats and groups, most recent first.",
14
+ inputSchema: {
15
+ company_id: companyIdSchema,
16
+ search: z.string().optional().describe("Match on the other participant or group name."),
17
+ limit: z.number().int().min(1).max(50).optional().default(20),
18
+ page: z.number().int().min(1).optional().default(1)
19
+ }
20
+ }, safeHandler(async (args) => {
21
+ const companyId = resolveCompanyId(client, args.company_id);
22
+ // the endpoint refuses an unscoped listing; scoping to the caller is
23
+ // what "my conversations" means
24
+ const response = await client.get("chats/search", {
25
+ company_id: companyId,
26
+ user_id: await currentUserId(client),
27
+ search: args.search,
28
+ limit: args.limit,
29
+ page: args.page
30
+ });
31
+ const { items: chats, total } = extractList(response.data, "chats");
32
+ return textResult({
33
+ count: total ?? chats.length,
34
+ chats: chats.map((c) => ({
35
+ id: c.id,
36
+ type: c.type,
37
+ title: c.title || c.name || undefined,
38
+ receiver_id: c.receiver_id ?? undefined,
39
+ // direct chats name the other side here; groups use title
40
+ receiver_name: [c.receiver_firstname, c.receiver_lastname].filter(Boolean).join(" ") || undefined,
41
+ members_count: c.members_count ?? undefined,
42
+ unread_count: c.unread_count ?? undefined,
43
+ last_message: c.last_message_content || undefined,
44
+ last_message_at: c.last_message_created || undefined,
45
+ updated: c.updated
46
+ }))
47
+ });
48
+ }));
49
+ server.registerTool("read_messages", {
50
+ title: "Read messages",
51
+ description: "Read messages from one conversation. Address it either by chat_id (a group or existing " +
52
+ "chat) or by user_id (the colleague on the other side).",
53
+ inputSchema: {
54
+ company_id: companyIdSchema,
55
+ chat_id: z.number().int().optional().describe("The conversation id."),
56
+ user_id: z.number().int().optional().describe("The other participant's user id, for a direct chat."),
57
+ search: z.string().optional(),
58
+ limit: z.number().int().min(1).max(50).optional().default(30),
59
+ page: z.number().int().min(1).optional().default(1),
60
+ direction: z.enum(["asc", "desc"]).optional().default("desc")
61
+ }
62
+ }, safeHandler(async (args) => {
63
+ if (!args.chat_id && !args.user_id) {
64
+ throw new Error("Pass either chat_id or user_id to say which conversation to read.");
65
+ }
66
+ const companyId = resolveCompanyId(client, args.company_id);
67
+ const response = await client.get("chats/messages/search", {
68
+ company_id: companyId,
69
+ chat_id: args.chat_id,
70
+ user_id: args.user_id,
71
+ search: args.search,
72
+ limit: args.limit,
73
+ page: args.page,
74
+ order_by: "created",
75
+ direction: args.direction
76
+ });
77
+ const { items: messages, total } = extractList(response.data, "messages");
78
+ return textResult({
79
+ count: total ?? messages.length,
80
+ messages: messages.map((m) => ({
81
+ id: m.id,
82
+ content: m.content,
83
+ sender_id: m.user_id ?? m.sender_id,
84
+ sender: [m.firstname, m.lastname].filter(Boolean).join(" ") || undefined,
85
+ created: m.created,
86
+ has_attachments: Array.isArray(m.attachments) && m.attachments.length > 0
87
+ }))
88
+ });
89
+ }));
90
+ server.registerTool("send_message", {
91
+ title: "Send a chat message",
92
+ description: "Send a message to a colleague or group. This delivers immediately to real people and " +
93
+ "cannot be unsent — confirm the recipient and the wording with the user before calling it. " +
94
+ "Address it by receiver_id (a person) or chat_id (a group).",
95
+ inputSchema: {
96
+ company_id: companyIdSchema,
97
+ receiver_id: z
98
+ .number()
99
+ .int()
100
+ .optional()
101
+ .describe("User id of the person to message. Use find_user to resolve a name."),
102
+ chat_id: z.number().int().optional().describe("Group or existing chat id."),
103
+ content: z.string().min(1).describe("The message text.")
104
+ }
105
+ }, safeHandler(async (args) => {
106
+ if (!args.receiver_id && !args.chat_id) {
107
+ throw new Error("Pass either receiver_id or chat_id to say where the message goes.");
108
+ }
109
+ const companyId = resolveCompanyId(client, args.company_id);
110
+ const response = await client.post("chats/messages/create", {
111
+ company_id: companyId,
112
+ receiver_id: args.receiver_id,
113
+ chat_id: args.chat_id,
114
+ content: args.content
115
+ });
116
+ const message = response.data?.message;
117
+ return textResult({
118
+ sent: true,
119
+ message_id: message?.id,
120
+ chat_id: message?.chat_id ?? args.chat_id,
121
+ receiver_id: args.receiver_id
122
+ });
123
+ }));
124
+ }
125
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/tools/chat.ts"],"names":[],"mappings":"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"}