@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.
- package/LICENSE +21 -0
- package/README.md +398 -0
- package/dist/client.js +110 -0
- package/dist/client.js.map +1 -0
- package/dist/config.js +37 -0
- package/dist/config.js.map +1 -0
- package/dist/helpers.js +192 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.js +194 -0
- package/dist/index.js.map +1 -0
- package/dist/setup.js +296 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools/admin.js +232 -0
- package/dist/tools/admin.js.map +1 -0
- package/dist/tools/benefit-funds.js +243 -0
- package/dist/tools/benefit-funds.js.map +1 -0
- package/dist/tools/chat-extra.js +172 -0
- package/dist/tools/chat-extra.js.map +1 -0
- package/dist/tools/chat.js +125 -0
- package/dist/tools/chat.js.map +1 -0
- package/dist/tools/cms.js +145 -0
- package/dist/tools/cms.js.map +1 -0
- package/dist/tools/crm-admin.js +269 -0
- package/dist/tools/crm-admin.js.map +1 -0
- package/dist/tools/crm.js +632 -0
- package/dist/tools/crm.js.map +1 -0
- package/dist/tools/dev-tickets.js +94 -0
- package/dist/tools/dev-tickets.js.map +1 -0
- package/dist/tools/forms.js +105 -0
- package/dist/tools/forms.js.map +1 -0
- package/dist/tools/hr.js +517 -0
- package/dist/tools/hr.js.map +1 -0
- package/dist/tools/kanban-extra.js +403 -0
- package/dist/tools/kanban-extra.js.map +1 -0
- package/dist/tools/misc.js +159 -0
- package/dist/tools/misc.js.map +1 -0
- package/dist/tools/projects.js +138 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/tasks.js +342 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/time.js +129 -0
- package/dist/tools/time.js.map +1 -0
- package/dist/tools/workplace.js +110 -0
- package/dist/tools/workplace.js.map +1 -0
- package/dist/tools/workspace.js +199 -0
- package/dist/tools/workspace.js.map +1 -0
- 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
|
+
}
|