@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 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/tools/time.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import { z } from "zod";
2
+ import { companyIdSchema, extractList, currentUserId, resolveCompanyId, safeHandler, textResult } from "../helpers.js";
3
+ /**
4
+ * Read-only staff surfaces beyond tasks: announcements, surveys and the user's
5
+ * own attendance record.
6
+ */
7
+ export function registerWorkplaceTools(server, client) {
8
+ server.registerTool("list_announcements", {
9
+ title: "List announcements",
10
+ description: "Read company announcements, newest first.",
11
+ inputSchema: {
12
+ company_id: companyIdSchema,
13
+ search: z.string().optional(),
14
+ limit: z.number().int().min(1).max(50).optional().default(15),
15
+ page: z.number().int().min(1).optional().default(1)
16
+ }
17
+ }, safeHandler(async (args) => {
18
+ const companyId = resolveCompanyId(client, args.company_id);
19
+ const response = await client.get("announcements/search", {
20
+ company_id: companyId,
21
+ // company-wide announcement reads are role-gated; scoping to the
22
+ // caller returns the ones addressed to them
23
+ user_id: await currentUserId(client),
24
+ search: args.search,
25
+ limit: args.limit,
26
+ page: args.page,
27
+ order_by: "created",
28
+ direction: "desc"
29
+ });
30
+ const { items, total } = extractList(response.data, "announcements");
31
+ return textResult({
32
+ count: total ?? items.length,
33
+ announcements: items.map((a) => ({
34
+ id: a.id,
35
+ title: a.title || undefined,
36
+ message: a.message,
37
+ created: a.created
38
+ }))
39
+ });
40
+ }));
41
+ server.registerTool("list_surveys", {
42
+ title: "List surveys",
43
+ description: "List surveys available to this user, such as pending questionnaires.",
44
+ inputSchema: {
45
+ company_id: companyIdSchema,
46
+ search: z.string().optional(),
47
+ is_active: z.boolean().optional().describe("Only surveys currently open."),
48
+ limit: z.number().int().min(1).max(50).optional().default(15),
49
+ page: z.number().int().min(1).optional().default(1)
50
+ }
51
+ }, safeHandler(async (args) => {
52
+ const companyId = resolveCompanyId(client, args.company_id);
53
+ const response = await client.get("surveys/search", {
54
+ company_id: companyId,
55
+ // without this the endpoint answers as a survey administrator and is
56
+ // role-gated; can_show asks for the surveys addressed to the caller
57
+ can_show: 1,
58
+ search: args.search,
59
+ is_active: args.is_active === undefined ? undefined : args.is_active ? 1 : 0,
60
+ limit: args.limit,
61
+ page: args.page
62
+ });
63
+ const { items, total } = extractList(response.data, "surveys");
64
+ return textResult({
65
+ count: total ?? items.length,
66
+ surveys: items.map((s) => ({
67
+ id: s.id,
68
+ title: s.title,
69
+ is_active: Boolean(s.is_active),
70
+ start_date: s.start_date || undefined,
71
+ end_date: s.end_date || undefined
72
+ }))
73
+ });
74
+ }));
75
+ server.registerTool("list_my_attendance", {
76
+ title: "List my attendance",
77
+ description: "Read the authenticated user's own attendance records for a date range.",
78
+ inputSchema: {
79
+ company_id: companyIdSchema,
80
+ from_date: z.string().optional().describe("Lower bound, YYYY-MM-DD."),
81
+ to_date: z.string().optional().describe("Upper bound, YYYY-MM-DD."),
82
+ limit: z.number().int().min(1).max(50).optional().default(30),
83
+ page: z.number().int().min(1).optional().default(1)
84
+ }
85
+ }, safeHandler(async (args) => {
86
+ const companyId = resolveCompanyId(client, args.company_id);
87
+ const myId = await currentUserId(client);
88
+ const response = await client.get("users/attendances/search", {
89
+ company_id: companyId,
90
+ user_id: myId,
91
+ from_date: args.from_date,
92
+ to_date: args.to_date,
93
+ limit: args.limit,
94
+ page: args.page,
95
+ order_by: "created",
96
+ direction: "desc"
97
+ });
98
+ const { items, total } = extractList(response.data, "attendances");
99
+ return textResult({
100
+ count: total ?? items.length,
101
+ attendances: items.map((a) => ({
102
+ id: a.id,
103
+ type: a.type,
104
+ date: a.date ?? a.created,
105
+ created: a.created
106
+ }))
107
+ });
108
+ }));
109
+ }
110
+ //# sourceMappingURL=workplace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workplace.js","sourceRoot":"","sources":["../../src/tools/workplace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ import { z } from "zod";
2
+ import { companyIdSchema, extractList, currentUserId, resolveCompanyId, safeHandler, summariseUser, textResult } from "../helpers.js";
3
+ /**
4
+ * Identity and org-structure tools.
5
+ *
6
+ * These are mostly the lookups that make the task tools usable: an assistant
7
+ * needs a project id before it can create a task in one, and a user id before it
8
+ * can assign it.
9
+ */
10
+ export function registerWorkspaceTools(server, client) {
11
+ server.registerTool("whoami", {
12
+ title: "Who am I",
13
+ description: "Identify the user this token acts as, with their company. Call this first when a request " +
14
+ "depends on who 'I' or 'me' refers to, or before any tool that needs company_id when no " +
15
+ "default is configured \u2014 the response lists every company this user belongs to, so a " +
16
+ "single-company user never needs a separate list_companies call.",
17
+ inputSchema: {}
18
+ }, safeHandler(async () => {
19
+ const response = await client.get("users/profile", {});
20
+ const user = response.data;
21
+ const result = {
22
+ ...summariseUser(user ?? {}),
23
+ default_company_id: client.defaultCompanyId
24
+ };
25
+ // A caller almost always needs a company_id right after whoami, so this
26
+ // resolves it eagerly instead of making the model discover the need for
27
+ // list_companies only after a tool call fails without one.
28
+ if (client.defaultCompanyId === undefined) {
29
+ try {
30
+ const companiesResponse = await client.get("companies/all", {});
31
+ const companies = companiesResponse.data ?? [];
32
+ result.companies = companies.map((c) => ({
33
+ id: c.id,
34
+ title: c.title,
35
+ domain: c.domain || undefined
36
+ }));
37
+ if (companies.length === 1) {
38
+ result.company_id = companies[0].id;
39
+ }
40
+ }
41
+ catch {
42
+ // Not fatal to whoami; a tool call downstream will surface the same
43
+ // failure with the same fix if company_id is actually needed.
44
+ }
45
+ }
46
+ return textResult(result);
47
+ }));
48
+ server.registerTool("list_companies", {
49
+ title: "List my companies",
50
+ description: "List companies this user belongs to. Useful when no default company is configured.",
51
+ inputSchema: {}
52
+ }, safeHandler(async () => {
53
+ const response = await client.get("companies/all", {});
54
+ const companies = response.data ?? [];
55
+ return textResult(companies.map((c) => ({ id: c.id, title: c.title, domain: c.domain || undefined })));
56
+ }));
57
+ server.registerTool("list_projects", {
58
+ title: "List projects",
59
+ description: "List projects visible to this user. Use it to find the project_id needed to create or " +
60
+ "filter tasks.",
61
+ inputSchema: {
62
+ company_id: companyIdSchema,
63
+ user_id: z
64
+ .number()
65
+ .int()
66
+ .optional()
67
+ .describe("Projects belonging to this user. Defaults to the authenticated user."),
68
+ all_company_projects: z
69
+ .boolean()
70
+ .optional()
71
+ .describe("List every project in the company rather than one user's. Requires an " + "admin-level role."),
72
+ search: z.string().optional().describe("Free-text match on the project title."),
73
+ limit: z.number().int().min(1).max(50).optional().default(25),
74
+ page: z.number().int().min(1).optional().default(1)
75
+ }
76
+ }, safeHandler(async (args) => {
77
+ const companyId = resolveCompanyId(client, args.company_id);
78
+ // Listing every project in a company is an admin-level read. Scoping to
79
+ // a user id returns that user's own projects, which is what a staff
80
+ // member asking "my projects" means and what their role permits.
81
+ let userId = args.user_id;
82
+ if (!userId && !args.all_company_projects) {
83
+ userId = await currentUserId(client);
84
+ }
85
+ const query = {
86
+ company_id: companyId,
87
+ search: args.search,
88
+ limit: args.limit,
89
+ page: args.page
90
+ };
91
+ const response = await client.get("projects/search", {
92
+ ...query,
93
+ user_id: userId
94
+ });
95
+ let { items: projects, total } = extractList(response.data, "projects");
96
+ // An admin who belongs to no project personally still expects to see the
97
+ // company's projects, so an empty own-projects result falls back to the
98
+ // company-wide listing. A non-admin is refused there and keeps the empty
99
+ // result, which is the correct answer for them.
100
+ if (projects.length === 0 && !args.user_id && !args.all_company_projects) {
101
+ try {
102
+ const fallback = await client.get("projects/search", query);
103
+ const wide = extractList(fallback.data, "projects");
104
+ projects = wide.items;
105
+ total = wide.total;
106
+ }
107
+ catch {
108
+ // not permitted company-wide; the empty own-projects list stands
109
+ }
110
+ }
111
+ return textResult({
112
+ count: total ?? projects.length,
113
+ projects: projects.map((p) => ({
114
+ id: p.id,
115
+ title: p.title ?? p.name,
116
+ type: p.type,
117
+ access: p.access || undefined,
118
+ is_archived: Boolean(p.is_archived)
119
+ }))
120
+ });
121
+ }));
122
+ server.registerTool("list_boards", {
123
+ title: "List boards in a project",
124
+ description: "List the boards (columns) of a project — needed to create a task, or to move one through " +
125
+ "the workflow.",
126
+ inputSchema: {
127
+ company_id: companyIdSchema,
128
+ project_id: z.number().int()
129
+ }
130
+ }, safeHandler(async (args) => {
131
+ const companyId = resolveCompanyId(client, args.company_id);
132
+ const response = await client.get("kanbans/boards/all", {
133
+ company_id: companyId,
134
+ project_id: args.project_id
135
+ });
136
+ const { items: boards } = extractList(response.data, "boards");
137
+ return textResult(boards.map((b) => ({
138
+ id: b.id,
139
+ name: b.name ?? b.title,
140
+ num: b.num,
141
+ is_archived: Boolean(b.is_archived)
142
+ })));
143
+ }));
144
+ server.registerTool("list_project_members", {
145
+ title: "List project members",
146
+ description: "List users who can be assigned work on a project. Use it to resolve a person's name to the " +
147
+ "user_id that assign_task needs.",
148
+ inputSchema: {
149
+ company_id: companyIdSchema,
150
+ project_id: z.number().int(),
151
+ limit: z.number().int().min(1).max(50).optional().default(50)
152
+ }
153
+ }, safeHandler(async (args) => {
154
+ const companyId = resolveCompanyId(client, args.company_id);
155
+ const response = await client.get("projects/users/search", {
156
+ company_id: companyId,
157
+ project_id: args.project_id,
158
+ limit: args.limit
159
+ });
160
+ const { items: users } = extractList(response.data, "project_users");
161
+ return textResult(users.map((u) => ({
162
+ // rows are project-membership rows: `id` there is the membership
163
+ // id, the assignable user is user_id/user_firstname/...
164
+ id: u.user_id ?? u.id,
165
+ name: [u.user_firstname, u.user_lastname].filter(Boolean).join(" ") || undefined,
166
+ staff_number: u.user_staff_number_with_prefix || u.user_staff_number || undefined,
167
+ status: u.status || undefined,
168
+ access: u.type || undefined
169
+ })));
170
+ }));
171
+ server.registerTool("find_user", {
172
+ title: "Find a colleague",
173
+ description: "Search company users by name, to resolve a person to their user_id before assigning work " +
174
+ "or sending a message.",
175
+ inputSchema: {
176
+ company_id: companyIdSchema,
177
+ search: z
178
+ .string()
179
+ .min(3)
180
+ .describe("Name, staff number, or email fragment (at least 3 characters — the backend's " +
181
+ "Persian-aware collation folds some single Latin letters onto Persian ones, so a " +
182
+ "1-2 character query can match far more users than intended)."),
183
+ limit: z.number().int().min(1).max(50).optional().default(15)
184
+ }
185
+ }, safeHandler(async (args) => {
186
+ const companyId = resolveCompanyId(client, args.company_id);
187
+ const response = await client.get("users/search", {
188
+ company_id: companyId,
189
+ search: args.search,
190
+ limit: args.limit
191
+ });
192
+ const { items: users, total } = extractList(response.data, "users");
193
+ return textResult({
194
+ count: total ?? users.length,
195
+ users: users.map(summariseUser)
196
+ });
197
+ }));
198
+ }
199
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/tools/workspace.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@codegame.dev/careerflow-mcp",
3
+ "version": "1.1.0",
4
+ "description": "MCP server exposing CareerFlow tasks, CRM, HR, and workplace tools to AI assistants",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "keywords": [
11
+ "mcp",
12
+ "mcp-server",
13
+ "model-context-protocol",
14
+ "careerflow",
15
+ "tasks",
16
+ "crm",
17
+ "hr",
18
+ "claude",
19
+ "claude-desktop",
20
+ "claude-code"
21
+ ],
22
+ "bin": {
23
+ "careerflow-mcp": "dist/index.js"
24
+ },
25
+ "main": "dist/index.js",
26
+ "files": [
27
+ "dist",
28
+ "README.md"
29
+ ],
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git+https://gitlab.com/dev.codegames/careerflow-mcp.git"
33
+ },
34
+ "homepage": "https://gitlab.com/dev.codegames/careerflow-mcp#readme",
35
+ "bugs": {
36
+ "url": "https://gitlab.com/dev.codegames/careerflow-mcp/-/issues"
37
+ },
38
+ "author": "Shahab Yousefi",
39
+ "scripts": {
40
+ "build": "tsc && node -e \"require('fs').chmodSync('dist/index.js', 0o755)\"",
41
+ "dev": "tsc --watch",
42
+ "start": "node dist/index.js",
43
+ "typecheck": "tsc --noEmit",
44
+ "format": "prettier --write \"src/**/*.ts\"",
45
+ "format:check": "prettier --check \"src/**/*.ts\"",
46
+ "smoke": "node scripts/smoke.mjs",
47
+ "prepublishOnly": "npm run typecheck && npm run build && npm run smoke"
48
+ },
49
+ "dependencies": {
50
+ "@modelcontextprotocol/sdk": "^1.30.0",
51
+ "zod": "^3.25.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^20.19.0",
55
+ "prettier": "^3.4.0",
56
+ "typescript": "^5.7.0"
57
+ },
58
+ "engines": {
59
+ "node": ">=18"
60
+ }
61
+ }