@teamso/teamso-mcp 0.0.0-stage → 1.2.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 (112) hide show
  1. package/CHANGELOG.md +121 -0
  2. package/LICENSE +21 -0
  3. package/README.md +516 -2
  4. package/dist/client.d.ts +215 -0
  5. package/dist/client.d.ts.map +1 -0
  6. package/dist/client.js +797 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/index.d.ts +3 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +32 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/prompts/index.d.ts +12 -0
  13. package/dist/prompts/index.d.ts.map +1 -0
  14. package/dist/prompts/index.js +58 -0
  15. package/dist/prompts/index.js.map +1 -0
  16. package/dist/server.d.ts +28 -0
  17. package/dist/server.d.ts.map +1 -0
  18. package/dist/server.js +58 -0
  19. package/dist/server.js.map +1 -0
  20. package/dist/tools/account.d.ts +4 -0
  21. package/dist/tools/account.d.ts.map +1 -0
  22. package/dist/tools/account.js +34 -0
  23. package/dist/tools/account.js.map +1 -0
  24. package/dist/tools/api.d.ts +13 -0
  25. package/dist/tools/api.d.ts.map +1 -0
  26. package/dist/tools/api.js +980 -0
  27. package/dist/tools/api.js.map +1 -0
  28. package/dist/tools/approvals.d.ts +5 -0
  29. package/dist/tools/approvals.d.ts.map +1 -0
  30. package/dist/tools/approvals.js +120 -0
  31. package/dist/tools/approvals.js.map +1 -0
  32. package/dist/tools/communication.d.ts +4 -0
  33. package/dist/tools/communication.d.ts.map +1 -0
  34. package/dist/tools/communication.js +39 -0
  35. package/dist/tools/communication.js.map +1 -0
  36. package/dist/tools/employees.d.ts +5 -0
  37. package/dist/tools/employees.d.ts.map +1 -0
  38. package/dist/tools/employees.js +113 -0
  39. package/dist/tools/employees.js.map +1 -0
  40. package/dist/tools/help.d.ts +6 -0
  41. package/dist/tools/help.d.ts.map +1 -0
  42. package/dist/tools/help.js +171 -0
  43. package/dist/tools/help.js.map +1 -0
  44. package/dist/tools/index.d.ts +86 -0
  45. package/dist/tools/index.d.ts.map +1 -0
  46. package/dist/tools/index.js +118 -0
  47. package/dist/tools/index.js.map +1 -0
  48. package/dist/tools/leave-support.d.ts +60 -0
  49. package/dist/tools/leave-support.d.ts.map +1 -0
  50. package/dist/tools/leave-support.js +185 -0
  51. package/dist/tools/leave-support.js.map +1 -0
  52. package/dist/tools/leave.d.ts +14 -0
  53. package/dist/tools/leave.d.ts.map +1 -0
  54. package/dist/tools/leave.js +386 -0
  55. package/dist/tools/leave.js.map +1 -0
  56. package/dist/tools/payroll.d.ts +5 -0
  57. package/dist/tools/payroll.d.ts.map +1 -0
  58. package/dist/tools/payroll.js +101 -0
  59. package/dist/tools/payroll.js.map +1 -0
  60. package/dist/tools/performance.d.ts +13 -0
  61. package/dist/tools/performance.d.ts.map +1 -0
  62. package/dist/tools/performance.js +592 -0
  63. package/dist/tools/performance.js.map +1 -0
  64. package/dist/tools/schemas.d.ts +2079 -0
  65. package/dist/tools/schemas.d.ts.map +1 -0
  66. package/dist/tools/schemas.js +460 -0
  67. package/dist/tools/schemas.js.map +1 -0
  68. package/dist/tools/shared.d.ts +20 -0
  69. package/dist/tools/shared.d.ts.map +1 -0
  70. package/dist/tools/shared.js +64 -0
  71. package/dist/tools/shared.js.map +1 -0
  72. package/dist/types.d.ts +545 -0
  73. package/dist/types.d.ts.map +1 -0
  74. package/dist/types.js +7 -0
  75. package/dist/types.js.map +1 -0
  76. package/dist/utils/api-endpoints.d.ts +130 -0
  77. package/dist/utils/api-endpoints.d.ts.map +1 -0
  78. package/dist/utils/api-endpoints.js +459 -0
  79. package/dist/utils/api-endpoints.js.map +1 -0
  80. package/dist/utils/dates.d.ts +27 -0
  81. package/dist/utils/dates.d.ts.map +1 -0
  82. package/dist/utils/dates.js +102 -0
  83. package/dist/utils/dates.js.map +1 -0
  84. package/dist/utils/format.d.ts +8 -0
  85. package/dist/utils/format.d.ts.map +1 -0
  86. package/dist/utils/format.js +26 -0
  87. package/dist/utils/format.js.map +1 -0
  88. package/dist/utils/help-search.d.ts +25 -0
  89. package/dist/utils/help-search.d.ts.map +1 -0
  90. package/dist/utils/help-search.js +93 -0
  91. package/dist/utils/help-search.js.map +1 -0
  92. package/dist/utils/json-schema-dialect.d.ts +12 -0
  93. package/dist/utils/json-schema-dialect.d.ts.map +1 -0
  94. package/dist/utils/json-schema-dialect.js +146 -0
  95. package/dist/utils/json-schema-dialect.js.map +1 -0
  96. package/dist/utils/results.d.ts +27 -0
  97. package/dist/utils/results.d.ts.map +1 -0
  98. package/dist/utils/results.js +88 -0
  99. package/dist/utils/results.js.map +1 -0
  100. package/dist/utils/structured.d.ts +89 -0
  101. package/dist/utils/structured.d.ts.map +1 -0
  102. package/dist/utils/structured.js +307 -0
  103. package/dist/utils/structured.js.map +1 -0
  104. package/dist/utils/text.d.ts +12 -0
  105. package/dist/utils/text.d.ts.map +1 -0
  106. package/dist/utils/text.js +46 -0
  107. package/dist/utils/text.js.map +1 -0
  108. package/dist/version.d.ts +3 -0
  109. package/dist/version.d.ts.map +1 -0
  110. package/dist/version.js +6 -0
  111. package/dist/version.js.map +1 -0
  112. package/package.json +86 -4
@@ -0,0 +1,89 @@
1
+ import type { z } from 'zod';
2
+ import type { HelpArticle, TeamsoAnnouncement, TeamsoAuthorizedEmployee, TeamsoGoal, TeamsoLeave, TeamsoLeavePolicyAssignment, TeamsoLeaveTypeBalance, TeamsoPayslip, TeamsoPerformancePeriod, TeamsoUser, TeamsoUserListItem, TeamsoUserSummary, TeamsoUserSummaryRef } from '../types.js';
3
+ import type { employeeSummarySchema, goalSchema, helpArticleSummarySchema, leaveSummarySchema, leaveTypeSchema, meOutputSchema, payslipSchema, pendingApprovalSchema, performancePeriodSchema } from '../tools/schemas.js';
4
+ /**
5
+ * Projections from Teamso API DTOs to the tool output schemas. Every function
6
+ * returns only schema fields, omitting empty values, so `structuredContent`
7
+ * validates against the published JSON Schema (which forbids unknown keys).
8
+ */
9
+ export type HelpArticleSummary = z.infer<typeof helpArticleSummarySchema>;
10
+ export type MeProjection = z.infer<typeof meOutputSchema.user>;
11
+ export type LeaveTypeProjection = z.infer<typeof leaveTypeSchema>;
12
+ export type LeaveSummary = z.infer<typeof leaveSummarySchema>;
13
+ export type PendingApproval = z.infer<typeof pendingApprovalSchema>;
14
+ export type EmployeeSummary = z.infer<typeof employeeSummarySchema>;
15
+ export type PerformancePeriodProjection = z.infer<typeof performancePeriodSchema>;
16
+ export type GoalProjection = z.infer<typeof goalSchema>;
17
+ export type PayslipProjection = z.infer<typeof payslipSchema>;
18
+ export declare const HELP_RESOURCE_PREFIX = "teamso://how-to/";
19
+ export declare const TARGETED_PERFORMANCE_KEY = "targetedPerformance";
20
+ /** Teamso leave `state` codes (`LeaveConstants`). */
21
+ export declare const LEAVE_STATUSES: {
22
+ readonly pending_approval: 0;
23
+ readonly approved: 2;
24
+ readonly rejected: 3;
25
+ readonly awaiting_usage_approval: 4;
26
+ readonly completed: 5;
27
+ readonly awaiting_document: 6;
28
+ };
29
+ export type LeaveStatus = keyof typeof LEAVE_STATUSES;
30
+ export declare function leaveStatusName(code: number | undefined): string;
31
+ export declare function toHelpArticleSummary(article: HelpArticle, lang: string, siteOrigin: string): HelpArticleSummary;
32
+ export declare function absoluteHelpUrl(article: HelpArticle, siteOrigin: string): string;
33
+ export declare function fullNameOf(person: {
34
+ fullname?: string | null;
35
+ fullName?: string | null;
36
+ name?: string | null;
37
+ secondName?: string | null;
38
+ surname?: string | null;
39
+ } | null | undefined): string;
40
+ export declare function personRef(person: TeamsoUserSummaryRef | null | undefined): {
41
+ id: string;
42
+ fullName: string;
43
+ } | null;
44
+ export declare function toMe(user: TeamsoUser): MeProjection;
45
+ export declare function toLeavePolicy(assignment: TeamsoLeavePolicyAssignment): {
46
+ leavePolicyUserId: string;
47
+ id?: string;
48
+ name?: string;
49
+ };
50
+ export declare function toLeaveType(balance: TeamsoLeaveTypeBalance): LeaveTypeProjection;
51
+ export declare function toLeaveSummary(leave: TeamsoLeave): LeaveSummary;
52
+ export declare function toPendingApproval(leave: TeamsoLeave): PendingApproval;
53
+ /** `closedPayrollPeriods` from a leave mutation result, as display strings. */
54
+ export declare function closedPayrollPeriodsOf(result: unknown): string[];
55
+ export declare function toEmployeeFromList(user: TeamsoUserListItem): EmployeeSummary;
56
+ export declare function toEmployeeFromAuthorized(employee: TeamsoAuthorizedEmployee): EmployeeSummary;
57
+ export declare function toEmployeeProfile(summary: TeamsoUserSummary): {
58
+ id: string;
59
+ fullName: string;
60
+ email?: string;
61
+ phone?: string;
62
+ branch?: string;
63
+ department?: string;
64
+ position?: string;
65
+ manager: {
66
+ id?: string;
67
+ fullName: string;
68
+ } | null;
69
+ workLocation?: string;
70
+ workplace?: string;
71
+ };
72
+ export declare function toPerformancePeriod(period: TeamsoPerformancePeriod): PerformancePeriodProjection;
73
+ export declare function targetValueOf(goal: TeamsoGoal): number | undefined;
74
+ export declare function toGoal(goal: TeamsoGoal): GoalProjection;
75
+ export declare function toAnnouncement(announcement: TeamsoAnnouncement): {
76
+ id: string;
77
+ type?: string;
78
+ text: string;
79
+ date?: string;
80
+ sharedBy?: string;
81
+ coverPhotoUrl?: string;
82
+ };
83
+ export declare function toPayslip(payslip: TeamsoPayslip): PayslipProjection;
84
+ export declare function roundDays(value: number): number;
85
+ export declare function optionalString(value: string | null | undefined): string | undefined;
86
+ export declare function optionalNumber(value: number | string | null | undefined): number | undefined;
87
+ /** Drops `undefined` fields so optional schema keys are omitted, not `undefined`. */
88
+ export declare function compact<T extends Record<string, unknown>>(value: T): T;
89
+ //# sourceMappingURL=structured.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured.d.ts","sourceRoot":"","sources":["../../src/utils/structured.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,307 @@
1
+ import { toDisplayDateTime, toIsoDay } from './dates.js';
2
+ import { htmlToText } from './text.js';
3
+ export const HELP_RESOURCE_PREFIX = 'teamso://how-to/';
4
+ export const TARGETED_PERFORMANCE_KEY = 'targetedPerformance';
5
+ /** Teamso leave `state` codes (`LeaveConstants`). */
6
+ export const LEAVE_STATUSES = {
7
+ pending_approval: 0,
8
+ approved: 2,
9
+ rejected: 3,
10
+ awaiting_usage_approval: 4,
11
+ completed: 5,
12
+ awaiting_document: 6,
13
+ };
14
+ export function leaveStatusName(code) {
15
+ const entry = Object.entries(LEAVE_STATUSES).find(([, value]) => value === code);
16
+ return entry ? entry[0] : code === undefined ? 'unknown' : `unknown_${code}`;
17
+ }
18
+ // ------------------------------------------------------------------- help
19
+ export function toHelpArticleSummary(article, lang, siteOrigin) {
20
+ return {
21
+ id: article.id,
22
+ title: article.title,
23
+ summary: article.summary ?? '',
24
+ module: article.dir,
25
+ roles: article.roles ?? [],
26
+ url: absoluteHelpUrl(article, siteOrigin),
27
+ resource: `${HELP_RESOURCE_PREFIX}${article.lang ?? lang}/${article.id}`,
28
+ };
29
+ }
30
+ export function absoluteHelpUrl(article, siteOrigin) {
31
+ const url = article.url ?? '';
32
+ if (/^https?:\/\//.test(url))
33
+ return url;
34
+ return `${siteOrigin}${url.startsWith('/') ? '' : '/'}${url}`;
35
+ }
36
+ // ---------------------------------------------------------------- account
37
+ export function fullNameOf(person) {
38
+ if (!person)
39
+ return '';
40
+ const full = person.fullname || person.fullName;
41
+ if (full && full.trim())
42
+ return full.trim();
43
+ return [person.name, person.secondName, person.surname]
44
+ .filter(part => part && part.trim())
45
+ .join(' ')
46
+ .trim();
47
+ }
48
+ export function personRef(person) {
49
+ if (!person?.id)
50
+ return null;
51
+ return { id: person.id, fullName: fullNameOf(person) || person.id };
52
+ }
53
+ export function toMe(user) {
54
+ const position = user.userTask?.userPosition;
55
+ const permissions = [...new Set((user.permissions ?? [])
56
+ .map(permission => permission.code)
57
+ .filter((code) => Boolean(code)))].sort();
58
+ return compact({
59
+ id: user.id,
60
+ fullName: fullNameOf(user) || user.id,
61
+ name: optionalString(user.name),
62
+ surname: optionalString(user.surname),
63
+ email: optionalString(user.email),
64
+ personnelId: optionalString(user.personnelId),
65
+ company: compact({
66
+ id: optionalString(user.companyId),
67
+ name: optionalString(user.companyName),
68
+ }),
69
+ department: optionalString(position?.department?.name),
70
+ position: optionalString(position?.name),
71
+ branch: optionalString(user.branchName?.name),
72
+ manager: personRef(user.userManager),
73
+ roles: (user.roles ?? []).map(role => role.name).filter((name) => Boolean(name)),
74
+ permissions,
75
+ payrollManager: user.payrollManager === true,
76
+ });
77
+ }
78
+ // ------------------------------------------------------------------ leave
79
+ export function toLeavePolicy(assignment) {
80
+ return compact({
81
+ leavePolicyUserId: assignment.leavePolicyUserId,
82
+ id: optionalString(assignment.leavePolicy?.id),
83
+ name: optionalString(assignment.leavePolicy?.name),
84
+ });
85
+ }
86
+ export function toLeaveType(balance) {
87
+ const type = balance.leaveTypeRequestModel;
88
+ return compact({
89
+ id: type.id,
90
+ name: type.name || type.id,
91
+ remainingDays: roundDays(balance.right ?? 0),
92
+ isDefault: type.primary === true,
93
+ paid: type.paid === true,
94
+ limitation: optionalString(type.limitation),
95
+ dayLimit: typeof type.dayLimit === 'number' && type.dayLimit > 0 ? type.dayLimit : undefined,
96
+ minDaysPerRequest: optionalNumber(type.leastDayCount),
97
+ maxDaysPerRequest: optionalNumber(type.mostDayCount),
98
+ documentRequired: type.documentRequired === true,
99
+ descriptionRequired: type.descriptionRequired === true,
100
+ birthdayLeave: type.birthdayLeave === true,
101
+ countsCalendarDays: type.overriddenHolidays === true,
102
+ });
103
+ }
104
+ export function toLeaveSummary(leave) {
105
+ return compact({
106
+ id: leave.id,
107
+ leaveTypeId: optionalString(leave.leaveTypeRequestModel?.id ?? leave.leaveTypeId),
108
+ leaveTypeName: optionalString(leave.leaveTypeRequestModel?.name),
109
+ start: optionalString(leave.startDate),
110
+ end: optionalString(leave.endDate),
111
+ workingDays: typeof leave.totalLeaveDay === 'number' ? roundDays(leave.totalLeaveDay) : undefined,
112
+ status: leaveStatusName(leave.state),
113
+ statusCode: leave.state,
114
+ description: optionalString(leave.description),
115
+ answer: optionalString(leave.answer),
116
+ createdAt: toDisplayDateTime(leave.createdAt ?? undefined),
117
+ });
118
+ }
119
+ export function toPendingApproval(leave) {
120
+ return compact({
121
+ leaveId: leave.id,
122
+ requester: leave.user?.id
123
+ ? personRef(leave.user)
124
+ : leave.userId ? { id: leave.userId, fullName: leave.userId } : null,
125
+ leaveTypeName: optionalString(leave.leaveTypeRequestModel?.name),
126
+ start: optionalString(leave.startDate),
127
+ end: optionalString(leave.endDate),
128
+ workingDays: typeof leave.totalLeaveDay === 'number' ? roundDays(leave.totalLeaveDay) : undefined,
129
+ description: optionalString(leave.description),
130
+ approvalStep: leave.approvalQueue,
131
+ createdAt: toDisplayDateTime(leave.createdAt ?? undefined),
132
+ });
133
+ }
134
+ /** `closedPayrollPeriods` from a leave mutation result, as display strings. */
135
+ export function closedPayrollPeriodsOf(result) {
136
+ if (!isRecord(result) || !Array.isArray(result.closedPayrollPeriods))
137
+ return [];
138
+ return result.closedPayrollPeriods
139
+ .map(period => {
140
+ if (typeof period === 'string')
141
+ return period;
142
+ if (isRecord(period)) {
143
+ const label = period.term ?? period.period ?? period.name ?? period.id;
144
+ return typeof label === 'string' ? label : JSON.stringify(period);
145
+ }
146
+ return String(period);
147
+ })
148
+ .filter(Boolean);
149
+ }
150
+ // -------------------------------------------------------------- employees
151
+ export function toEmployeeFromList(user) {
152
+ const position = user.userTask?.userPosition;
153
+ return compact({
154
+ id: user.id,
155
+ fullName: fullNameOf(user) || user.id,
156
+ email: optionalString(user.email),
157
+ personnelId: optionalString(user.personnelId),
158
+ department: optionalString(position?.department?.name),
159
+ position: optionalString(position?.name),
160
+ branch: optionalString(user.branch?.name),
161
+ });
162
+ }
163
+ export function toEmployeeFromAuthorized(employee) {
164
+ return compact({
165
+ id: employee.id,
166
+ fullName: fullNameOf(employee) || employee.id,
167
+ email: optionalString(employee.email),
168
+ personnelId: optionalString(employee.personnelId),
169
+ });
170
+ }
171
+ export function toEmployeeProfile(summary) {
172
+ return compact({
173
+ id: summary.id,
174
+ fullName: optionalString(summary.fullname) ?? summary.id,
175
+ email: optionalString(summary.email),
176
+ phone: optionalString(summary.tel),
177
+ branch: optionalString(summary.branchName),
178
+ department: optionalString(summary.departmentName),
179
+ position: optionalString(summary.positionName),
180
+ manager: summary.manager || summary.managerId
181
+ ? compact({
182
+ id: optionalString(summary.managerId),
183
+ fullName: optionalString(summary.manager) ?? summary.managerId ?? '',
184
+ })
185
+ : null,
186
+ workLocation: optionalString(summary.workLocation),
187
+ workplace: optionalString(summary.workPlaceName),
188
+ });
189
+ }
190
+ // ------------------------------------------------------------ performance
191
+ export function toPerformancePeriod(period) {
192
+ const scale = [...(period.evaluationScale ?? [])]
193
+ .sort((a, b) => (a.displayOrder ?? 0) - (b.displayOrder ?? 0))
194
+ .map(item => compact({
195
+ label: item.label ?? '',
196
+ value: optionalNumber(item.value),
197
+ minPercentage: optionalNumber(item.minPercentage),
198
+ maxPercentage: optionalNumber(item.maxPercentage),
199
+ }));
200
+ return compact({
201
+ id: period.id,
202
+ title: period.title,
203
+ status: optionalString(period.status),
204
+ startDate: toIsoDay(period.startDate),
205
+ endDate: toIsoDay(period.endDate),
206
+ targetEntryStartDate: toIsoDay(period.targetEntryStartDate),
207
+ targetEntryEndDate: toIsoDay(period.targetEntryEndDate),
208
+ targetEntryOpen: period.isTargetEntryOpen === true,
209
+ targetEntryLocked: period.isTargetEntryLocked === true,
210
+ goalEntryBy: optionalString(period.goalEntryBy),
211
+ successCriteriaEntryBy: optionalString(period.successCriteriaEntryBy),
212
+ minimumGoalCount: optionalNumber(period.minimumGoalCount),
213
+ employeeCanSelectOther: period.employeeCanSelectOther === true,
214
+ evaluationScale: scale,
215
+ });
216
+ }
217
+ export function targetValueOf(goal) {
218
+ if (typeof goal.targetValue === 'number')
219
+ return goal.targetValue;
220
+ const scores = goal.targetValueDefinition?.scores ?? [];
221
+ const target = scores.find(score => score.key === TARGETED_PERFORMANCE_KEY) ?? scores[0];
222
+ return optionalNumber(target?.value);
223
+ }
224
+ export function toGoal(goal) {
225
+ const definition = goal.targetValueDefinition;
226
+ return compact({
227
+ id: goal.id,
228
+ userId: optionalString(goal.userId),
229
+ userFullName: optionalString(goal.userFullName),
230
+ name: goal.name ?? '',
231
+ description: optionalString(goal.description),
232
+ type: optionalString(goal.type),
233
+ period: optionalString(goal.periodName),
234
+ status: goal.status ?? 'UNKNOWN',
235
+ weight: optionalNumber(goal.weight),
236
+ scaleCriterion: optionalString(definition?.scaleCriterion),
237
+ currency: optionalString(definition?.currency),
238
+ otherText: optionalString(definition?.otherText),
239
+ targetValue: targetValueOf(goal),
240
+ actualValue: optionalNumber(goal.actualValue),
241
+ actualText: optionalString(goal.actualText),
242
+ managerActualValue: optionalNumber(goal.managerActualValue),
243
+ managerActualText: optionalString(goal.managerActualText),
244
+ achievementPercentage: optionalNumber(goal.achievementPercentage),
245
+ // The evaluation result lives in scoreValue/weightedScore; `score` is a legacy column the API leaves null.
246
+ score: optionalNumber(goal.scoreValue ?? goal.score),
247
+ weightedScore: optionalNumber(goal.weightedScore),
248
+ // The owner's period final score once the evaluation chain has finished (same on every goal of the owner).
249
+ finalScore: optionalNumber(goal.userFinalScore),
250
+ finalScoreText: optionalString(goal.userFinalScoreText),
251
+ canApproveGoal: goal.canApproveGoal === true,
252
+ canReviseGoal: goal.canReviseGoal === true,
253
+ canEnterActualValue: goal.canEnterActualValue === true,
254
+ canApproveEvaluation: goal.canApprove === true,
255
+ });
256
+ }
257
+ // ---------------------------------------------------------- communication
258
+ export function toAnnouncement(announcement) {
259
+ return compact({
260
+ id: announcement.id,
261
+ type: optionalString(announcement.announcementType),
262
+ text: htmlToText(announcement.announcement),
263
+ date: optionalString(announcement.date),
264
+ sharedBy: optionalString(fullNameOf(announcement.sharedUser)),
265
+ coverPhotoUrl: optionalString(announcement.coverPhotoUrl),
266
+ });
267
+ }
268
+ // ---------------------------------------------------------------- payroll
269
+ export function toPayslip(payslip) {
270
+ return compact({
271
+ id: payslip.id,
272
+ term: optionalString(payslip.term),
273
+ status: optionalString(payslip.status),
274
+ sentToEmployeeAt: optionalString(payslip.sentToEmployeeAt),
275
+ createdAt: optionalString(payslip.createdAt),
276
+ canAnswer: payslip.canAnswer === true,
277
+ userAnswer: optionalString(payslip.userAnswer),
278
+ managerAnswer: optionalString(payslip.managerAnswer),
279
+ });
280
+ }
281
+ // ---------------------------------------------------------------- helpers
282
+ export function roundDays(value) {
283
+ return Math.round(value * 100) / 100;
284
+ }
285
+ export function optionalString(value) {
286
+ if (typeof value !== 'string')
287
+ return undefined;
288
+ const trimmed = value.trim();
289
+ return trimmed ? trimmed : undefined;
290
+ }
291
+ export function optionalNumber(value) {
292
+ if (typeof value === 'number')
293
+ return Number.isFinite(value) ? value : undefined;
294
+ if (typeof value === 'string' && value.trim()) {
295
+ const parsed = Number(value);
296
+ return Number.isFinite(parsed) ? parsed : undefined;
297
+ }
298
+ return undefined;
299
+ }
300
+ /** Drops `undefined` fields so optional schema keys are omitted, not `undefined`. */
301
+ export function compact(value) {
302
+ return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
303
+ }
304
+ function isRecord(value) {
305
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
306
+ }
307
+ //# sourceMappingURL=structured.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured.js","sourceRoot":"","sources":["../../src/utils/structured.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Case- and diacritic-insensitive folding for Turkish text, matching the API's
3
+ * `SearchTextUtil.normalize`: I/İ/ı collapse onto "i" and every other accent
4
+ * (ş, ç, ğ, ö, ü) is stripped, so "ozturk" finds "Öztürk".
5
+ */
6
+ export declare function normalizeSearchText(value: string | null | undefined): string;
7
+ /** True when every whitespace-separated word of the query appears in one of the values. */
8
+ export declare function matchesAllWords(query: string, ...values: Array<string | null | undefined>): boolean;
9
+ /** Plain text from the HTML the announcement editor stores. */
10
+ export declare function htmlToText(html: string | null | undefined): string;
11
+ export declare function truncate(value: string, maxLength: number): string;
12
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAO5E;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,OAAO,CAKnG;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAelE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGjE"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Case- and diacritic-insensitive folding for Turkish text, matching the API's
3
+ * `SearchTextUtil.normalize`: I/İ/ı collapse onto "i" and every other accent
4
+ * (ş, ç, ğ, ö, ü) is stripped, so "ozturk" finds "Öztürk".
5
+ */
6
+ export function normalizeSearchText(value) {
7
+ if (!value)
8
+ return '';
9
+ return value
10
+ .replace(/[ıI]/g, 'i')
11
+ .normalize('NFD')
12
+ .replace(/\p{M}+/gu, '')
13
+ .toLowerCase();
14
+ }
15
+ /** True when every whitespace-separated word of the query appears in one of the values. */
16
+ export function matchesAllWords(query, ...values) {
17
+ const words = normalizeSearchText(query).split(/\s+/).filter(Boolean);
18
+ if (words.length === 0)
19
+ return true;
20
+ const haystack = values.map(normalizeSearchText).filter(Boolean).join(' ');
21
+ return words.every(word => haystack.includes(word));
22
+ }
23
+ /** Plain text from the HTML the announcement editor stores. */
24
+ export function htmlToText(html) {
25
+ if (!html)
26
+ return '';
27
+ return html
28
+ .replace(/<\s*br\s*\/?>/gi, '\n')
29
+ .replace(/<\/\s*(p|div|li|h[1-6])\s*>/gi, '\n')
30
+ .replace(/<[^>]+>/g, '')
31
+ .replace(/&nbsp;/g, ' ')
32
+ .replace(/&amp;/g, '&')
33
+ .replace(/&lt;/g, '<')
34
+ .replace(/&gt;/g, '>')
35
+ .replace(/&quot;/g, '"')
36
+ .replace(/&#39;/g, "'")
37
+ .replace(/[ \t]+/g, ' ')
38
+ .replace(/\s*\n\s*/g, '\n')
39
+ .trim();
40
+ }
41
+ export function truncate(value, maxLength) {
42
+ if (value.length <= maxLength)
43
+ return value;
44
+ return `${value.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;
45
+ }
46
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAgC;IAClE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK;SACT,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,GAAG,MAAwC;IACxF,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,UAAU,CAAC,IAA+B;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI;SACR,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;SAChC,OAAO,CAAC,+BAA+B,EAAE,IAAI,CAAC;SAC9C,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,SAAiB;IACvD,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AACpE,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Package version, also sent to the API as `X-Teamso-Client: teamso-mcp/<version>`. */
2
+ export declare const VERSION: string;
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAKA,wFAAwF;AACxF,eAAO,MAAM,OAAO,EAAE,MAAgB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { createRequire } from 'node:module';
2
+ const require = createRequire(import.meta.url);
3
+ const { version } = require('../package.json');
4
+ /** Package version, also sent to the API as `X-Teamso-Client: teamso-mcp/<version>`. */
5
+ export const VERSION = version;
6
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,wFAAwF;AACxF,MAAM,CAAC,MAAM,OAAO,GAAW,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,88 @@
1
1
  {
2
2
  "name": "@teamso/teamso-mcp",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "1.2.0",
4
+ "description": "Official MCP server for Teamso HR — request leave, handle approvals, find colleagues, manage performance goals, read payslips, search the Teamso help center and reach every other Teamso module through permission-checked generic API tools from Cursor, Claude, Windsurf, and any MCP-compatible AI assistant",
5
+ "type": "module",
6
+ "main": "dist/server.js",
7
+ "types": "dist/server.d.ts",
8
+ "bin": {
9
+ "teamso-mcp": "dist/index.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/server.d.ts",
14
+ "default": "./dist/server.js"
15
+ },
16
+ "./server": {
17
+ "types": "./dist/server.d.ts",
18
+ "default": "./dist/server.js"
19
+ },
20
+ "./client": {
21
+ "types": "./dist/client.d.ts",
22
+ "default": "./dist/client.js"
23
+ },
24
+ "./prompts": {
25
+ "types": "./dist/prompts/index.d.ts",
26
+ "default": "./dist/prompts/index.js"
27
+ },
28
+ "./tools": {
29
+ "types": "./dist/tools/index.d.ts",
30
+ "default": "./dist/tools/index.js"
31
+ },
32
+ "./package.json": "./package.json"
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "README.md",
37
+ "CHANGELOG.md",
38
+ "LICENSE"
39
+ ],
40
+ "scripts": {
41
+ "build": "tsc",
42
+ "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
43
+ "typecheck": "tsc --noEmit",
44
+ "test": "npm run build && node --test tests/*.test.mjs",
45
+ "prepare": "npm run build",
46
+ "prepublishOnly": "npm run clean && npm run build"
47
+ },
48
+ "keywords": [
49
+ "teamso",
50
+ "hr",
51
+ "hris",
52
+ "human-resources",
53
+ "leave-management",
54
+ "performance-management",
55
+ "payroll",
56
+ "mcp",
57
+ "model-context-protocol",
58
+ "cursor",
59
+ "claude",
60
+ "windsurf",
61
+ "llm"
62
+ ],
63
+ "author": "Teamso",
64
+ "license": "MIT",
65
+ "repository": {
66
+ "type": "git",
67
+ "url": "git+https://github.com/Teamsocom/Teamso-MCP.git"
68
+ },
69
+ "homepage": "https://teamso.com/docs/mcp-self-hosted",
70
+ "bugs": {
71
+ "url": "https://github.com/Teamsocom/Teamso-MCP/issues"
72
+ },
73
+ "publishConfig": {
74
+ "access": "public"
75
+ },
76
+ "engines": {
77
+ "node": ">=20.0.0"
78
+ },
79
+ "dependencies": {
80
+ "@modelcontextprotocol/sdk": "^1.30.0",
81
+ "ajv": "^8.20.0",
82
+ "zod": "^3.25.76"
83
+ },
84
+ "devDependencies": {
85
+ "@types/node": "^22.0.0",
86
+ "typescript": "^5.7.0"
87
+ }
88
+ }