@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,145 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { companyIdSchema, extractList, resolveCompanyId, safeHandler, textResult } from "../helpers.js";
|
|
3
|
+
/**
|
|
4
|
+
* Trims a CMS post row for list results. The raw row carries the full
|
|
5
|
+
* `content` body (`{en, tr, fa}` HTML) alongside `short_content`, five image
|
|
6
|
+
* variants, and per-locale JSON blobs (`features`/`info`) meant for the page
|
|
7
|
+
* renderer — a list result only needs enough to identify a post and decide
|
|
8
|
+
* whether to fetch it in full with get_post.
|
|
9
|
+
*/
|
|
10
|
+
function summarisePost(p) {
|
|
11
|
+
return {
|
|
12
|
+
id: p.id,
|
|
13
|
+
slug: p.slug,
|
|
14
|
+
type: p.type,
|
|
15
|
+
status: p.status,
|
|
16
|
+
title: p.title?.en || p.title?.fa || undefined,
|
|
17
|
+
short_content: p.short_content?.en || p.short_content?.fa || undefined,
|
|
18
|
+
is_featured: Boolean(p.is_featured),
|
|
19
|
+
view_count: p.view_count ?? undefined,
|
|
20
|
+
author: [p.user_firstname, p.user_lastname].filter(Boolean).join(" ") || undefined,
|
|
21
|
+
category_ids: Array.isArray(p.category_ids) ? p.category_ids : undefined,
|
|
22
|
+
published: p.published || undefined,
|
|
23
|
+
created: p.created,
|
|
24
|
+
updated: p.updated
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/** CMS tools: blog/news posts and static custom pages. */
|
|
28
|
+
export function registerCmsTools(server, client) {
|
|
29
|
+
server.registerTool("list_posts", {
|
|
30
|
+
title: "List CMS posts",
|
|
31
|
+
description: "List blog/news posts.",
|
|
32
|
+
inputSchema: {
|
|
33
|
+
company_id: companyIdSchema,
|
|
34
|
+
search: z.string().optional(),
|
|
35
|
+
limit: z.number().int().min(1).max(50).optional().default(15),
|
|
36
|
+
page: z.number().int().min(1).optional().default(1)
|
|
37
|
+
}
|
|
38
|
+
}, safeHandler(async (args) => {
|
|
39
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
40
|
+
const response = await client.get("posts/search", {
|
|
41
|
+
company_id: companyId,
|
|
42
|
+
search: args.search,
|
|
43
|
+
limit: args.limit,
|
|
44
|
+
page: args.page
|
|
45
|
+
});
|
|
46
|
+
const { items, total } = extractList(response.data, "posts");
|
|
47
|
+
return textResult({ count: total ?? items.length, posts: items.map(summarisePost) });
|
|
48
|
+
}));
|
|
49
|
+
server.registerTool("get_post", {
|
|
50
|
+
title: "Get a CMS post",
|
|
51
|
+
description: "Fetch one post in full, by id or slug.",
|
|
52
|
+
inputSchema: {
|
|
53
|
+
company_id: companyIdSchema,
|
|
54
|
+
post_id: z.number().int().optional(),
|
|
55
|
+
slug: z.string().optional()
|
|
56
|
+
}
|
|
57
|
+
}, safeHandler(async (args) => {
|
|
58
|
+
if (!args.post_id && !args.slug) {
|
|
59
|
+
throw new Error("Pass either post_id or slug.");
|
|
60
|
+
}
|
|
61
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
62
|
+
const path = args.post_id ? `posts/${args.post_id}` : `posts/slug/${args.slug}`;
|
|
63
|
+
const response = await client.get(path, { company_id: companyId });
|
|
64
|
+
return textResult(response.data);
|
|
65
|
+
}));
|
|
66
|
+
server.registerTool("create_post", {
|
|
67
|
+
title: "Create a CMS post",
|
|
68
|
+
description: "Create a blog/news post.",
|
|
69
|
+
inputSchema: {
|
|
70
|
+
company_id: companyIdSchema,
|
|
71
|
+
title: z.string().min(1),
|
|
72
|
+
content: z.string().optional(),
|
|
73
|
+
category_id: z.number().int().optional()
|
|
74
|
+
}
|
|
75
|
+
}, safeHandler(async (args) => {
|
|
76
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
77
|
+
const response = await client.post("posts/create", {
|
|
78
|
+
company_id: companyId,
|
|
79
|
+
title: args.title,
|
|
80
|
+
content: args.content,
|
|
81
|
+
category_id: args.category_id
|
|
82
|
+
});
|
|
83
|
+
return textResult({ created: true, post: response.data });
|
|
84
|
+
}));
|
|
85
|
+
server.registerTool("update_post", {
|
|
86
|
+
title: "Update a CMS post",
|
|
87
|
+
description: "Edit a post's title or content.",
|
|
88
|
+
inputSchema: {
|
|
89
|
+
company_id: companyIdSchema,
|
|
90
|
+
post_id: z.number().int(),
|
|
91
|
+
title: z.string().min(1).optional(),
|
|
92
|
+
content: z.string().optional()
|
|
93
|
+
}
|
|
94
|
+
}, safeHandler(async (args) => {
|
|
95
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
96
|
+
const response = await client.post("posts/edit", {
|
|
97
|
+
company_id: companyId,
|
|
98
|
+
id: args.post_id,
|
|
99
|
+
title: args.title,
|
|
100
|
+
content: args.content
|
|
101
|
+
});
|
|
102
|
+
return textResult({ updated: true, post: response.data });
|
|
103
|
+
}));
|
|
104
|
+
server.registerTool("delete_post", {
|
|
105
|
+
title: "Delete a CMS post",
|
|
106
|
+
description: "Delete a post.",
|
|
107
|
+
inputSchema: { company_id: companyIdSchema, post_id: z.number().int() }
|
|
108
|
+
}, safeHandler(async (args) => {
|
|
109
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
110
|
+
await client.post(`posts/delete/${args.post_id}`, { company_id: companyId });
|
|
111
|
+
return textResult({ deleted: true, post_id: args.post_id });
|
|
112
|
+
}));
|
|
113
|
+
server.registerTool("list_custom_pages", {
|
|
114
|
+
title: "List custom pages",
|
|
115
|
+
description: "List static custom pages on the company's site.",
|
|
116
|
+
inputSchema: {
|
|
117
|
+
company_id: companyIdSchema,
|
|
118
|
+
search: z.string().optional(),
|
|
119
|
+
limit: z.number().int().min(1).max(50).optional().default(15),
|
|
120
|
+
page: z.number().int().min(1).optional().default(1)
|
|
121
|
+
}
|
|
122
|
+
}, safeHandler(async (args) => {
|
|
123
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
124
|
+
const response = await client.get("custom-pages/search", {
|
|
125
|
+
company_id: companyId,
|
|
126
|
+
search: args.search,
|
|
127
|
+
limit: args.limit,
|
|
128
|
+
page: args.page
|
|
129
|
+
});
|
|
130
|
+
const { items, total } = extractList(response.data, "custom_pages");
|
|
131
|
+
return textResult({ count: total ?? items.length, custom_pages: items });
|
|
132
|
+
}));
|
|
133
|
+
server.registerTool("get_custom_page", {
|
|
134
|
+
title: "Get a custom page",
|
|
135
|
+
description: "Fetch one custom page's content.",
|
|
136
|
+
inputSchema: { company_id: companyIdSchema, page_id: z.number().int() }
|
|
137
|
+
}, safeHandler(async (args) => {
|
|
138
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
139
|
+
const response = await client.get(`custom-pages/${args.page_id}`, {
|
|
140
|
+
company_id: companyId
|
|
141
|
+
});
|
|
142
|
+
return textResult(response.data);
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=cms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cms.js","sourceRoot":"","sources":["../../src/tools/cms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { boolParam, companyIdSchema, resolveCompanyId, safeHandler, textResult } from "../helpers.js";
|
|
3
|
+
/**
|
|
4
|
+
* Pipeline/stage rows duplicate their Farsi name twice: once inside the
|
|
5
|
+
* `{en, fa}` name object and again as a separately flattened `*_fa` column
|
|
6
|
+
* from the same underlying table row. Stages nested under a pipeline here
|
|
7
|
+
* keep the same duplication, so they're trimmed too.
|
|
8
|
+
*/
|
|
9
|
+
function summarisePipeline(p) {
|
|
10
|
+
return {
|
|
11
|
+
id: p.id,
|
|
12
|
+
name: p.name?.en || p.name?.fa || undefined,
|
|
13
|
+
kind: p.kind,
|
|
14
|
+
num: p.num,
|
|
15
|
+
is_default: Boolean(p.is_default),
|
|
16
|
+
is_active: Boolean(p.is_active),
|
|
17
|
+
stages: Array.isArray(p.stages) ? p.stages.map(summariseStage) : undefined
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function summariseStage(s) {
|
|
21
|
+
return {
|
|
22
|
+
id: s.id,
|
|
23
|
+
pipeline_id: s.pipeline_id,
|
|
24
|
+
pipeline_name: s.pipeline_name?.en || s.pipeline_name?.fa || undefined,
|
|
25
|
+
pipeline_kind: s.pipeline_kind || undefined,
|
|
26
|
+
stage_name: s.stage_name?.en || s.stage_name?.fa || undefined,
|
|
27
|
+
num: s.num,
|
|
28
|
+
probability_default: s.probability_default ?? undefined,
|
|
29
|
+
is_won: Boolean(s.is_won),
|
|
30
|
+
is_lost: Boolean(s.is_lost),
|
|
31
|
+
is_active: Boolean(s.is_active),
|
|
32
|
+
color_code: s.color_code || undefined
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* CRM configuration tools: pipelines/stages, lead sources, custom fields, tags,
|
|
37
|
+
* attachments, and lead-scoring rules.
|
|
38
|
+
*
|
|
39
|
+
* These shape the boards that crm_create_contact/crm_create_deal place records
|
|
40
|
+
* on — list_pipelines and list_stages are how a caller resolves the ids those
|
|
41
|
+
* tools need.
|
|
42
|
+
*/
|
|
43
|
+
export function registerCrmAdminTools(server, client) {
|
|
44
|
+
server.registerTool("crm_list_pipelines", {
|
|
45
|
+
title: "List CRM pipelines",
|
|
46
|
+
description: "List lead or deal pipelines. Use this to resolve pipeline_id for contacts and deals.",
|
|
47
|
+
inputSchema: { company_id: companyIdSchema, kind: z.enum(["lead", "deal"]).optional() }
|
|
48
|
+
}, safeHandler(async (args) => {
|
|
49
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
50
|
+
const response = await client.get("crm/pipelines/all", {
|
|
51
|
+
company_id: companyId,
|
|
52
|
+
kind: args.kind
|
|
53
|
+
});
|
|
54
|
+
const items = response.data ?? [];
|
|
55
|
+
return textResult({ count: items.length, pipelines: items.map(summarisePipeline) });
|
|
56
|
+
}));
|
|
57
|
+
server.registerTool("crm_create_pipeline", {
|
|
58
|
+
title: "Create a CRM pipeline",
|
|
59
|
+
description: "Create a lead or deal pipeline. Add stages to it afterward with crm_create_stage.",
|
|
60
|
+
inputSchema: {
|
|
61
|
+
company_id: companyIdSchema,
|
|
62
|
+
name: z.string().min(1).max(100),
|
|
63
|
+
kind: z.enum(["lead", "deal"]),
|
|
64
|
+
name_fa: z.string().optional(),
|
|
65
|
+
num: z.number().optional().default(0),
|
|
66
|
+
is_default: z.boolean().optional(),
|
|
67
|
+
is_active: z.boolean().optional().default(true)
|
|
68
|
+
}
|
|
69
|
+
}, safeHandler(async (args) => {
|
|
70
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
71
|
+
const response = await client.post("crm/pipelines/create", {
|
|
72
|
+
company_id: companyId,
|
|
73
|
+
name: args.name,
|
|
74
|
+
kind: args.kind,
|
|
75
|
+
name_fa: args.name_fa,
|
|
76
|
+
num: args.num,
|
|
77
|
+
is_default: boolParam(args.is_default),
|
|
78
|
+
is_active: boolParam(args.is_active)
|
|
79
|
+
});
|
|
80
|
+
return textResult({ created: true, pipeline: response.data });
|
|
81
|
+
}));
|
|
82
|
+
server.registerTool("crm_delete_pipeline", {
|
|
83
|
+
title: "Delete a CRM pipeline",
|
|
84
|
+
description: "Delete a pipeline. Refused if any deal still references it.",
|
|
85
|
+
inputSchema: { company_id: companyIdSchema, pipeline_id: z.number().int() }
|
|
86
|
+
}, safeHandler(async (args) => {
|
|
87
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
88
|
+
await client.post(`crm/pipelines/delete/${args.pipeline_id}`, { company_id: companyId });
|
|
89
|
+
return textResult({ deleted: true, pipeline_id: args.pipeline_id });
|
|
90
|
+
}));
|
|
91
|
+
server.registerTool("crm_list_stages", {
|
|
92
|
+
title: "List CRM pipeline stages",
|
|
93
|
+
description: "List stages, optionally for one pipeline. is_won/is_lost mark the stages that settle a " +
|
|
94
|
+
"lead or deal. Use this to resolve stage_id.",
|
|
95
|
+
inputSchema: { company_id: companyIdSchema, pipeline_id: z.number().int().optional() }
|
|
96
|
+
}, safeHandler(async (args) => {
|
|
97
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
98
|
+
const response = await client.get("crm/stages/all", {
|
|
99
|
+
company_id: companyId,
|
|
100
|
+
pipeline_id: args.pipeline_id
|
|
101
|
+
});
|
|
102
|
+
const items = response.data ?? [];
|
|
103
|
+
return textResult({ count: items.length, stages: items.map(summariseStage) });
|
|
104
|
+
}));
|
|
105
|
+
server.registerTool("crm_create_stage", {
|
|
106
|
+
title: "Create a CRM pipeline stage",
|
|
107
|
+
description: "Add a stage to a pipeline at a given position (num).",
|
|
108
|
+
inputSchema: {
|
|
109
|
+
company_id: companyIdSchema,
|
|
110
|
+
pipeline_id: z.number().int(),
|
|
111
|
+
stage_name: z.string().min(1).max(100),
|
|
112
|
+
num: z.number().describe("Sort position."),
|
|
113
|
+
stage_name_fa: z.string().optional(),
|
|
114
|
+
probability_default: z.number().int().optional().default(0),
|
|
115
|
+
is_won: z.boolean().optional().default(false),
|
|
116
|
+
is_lost: z.boolean().optional().default(false),
|
|
117
|
+
is_active: z.boolean().optional().default(true),
|
|
118
|
+
color_code: z.string().max(7).optional()
|
|
119
|
+
}
|
|
120
|
+
}, safeHandler(async (args) => {
|
|
121
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
122
|
+
const response = await client.post("crm/stages/create", {
|
|
123
|
+
company_id: companyId,
|
|
124
|
+
pipeline_id: args.pipeline_id,
|
|
125
|
+
stage_name: args.stage_name,
|
|
126
|
+
num: args.num,
|
|
127
|
+
stage_name_fa: args.stage_name_fa,
|
|
128
|
+
probability_default: args.probability_default,
|
|
129
|
+
is_won: boolParam(args.is_won),
|
|
130
|
+
is_lost: boolParam(args.is_lost),
|
|
131
|
+
is_active: boolParam(args.is_active),
|
|
132
|
+
color_code: args.color_code
|
|
133
|
+
});
|
|
134
|
+
return textResult({ created: true, stage: response.data });
|
|
135
|
+
}));
|
|
136
|
+
server.registerTool("crm_delete_stage", {
|
|
137
|
+
title: "Delete a CRM pipeline stage",
|
|
138
|
+
description: "Delete a stage. Refused if any deal is currently on it.",
|
|
139
|
+
inputSchema: { company_id: companyIdSchema, stage_id: z.number().int() }
|
|
140
|
+
}, safeHandler(async (args) => {
|
|
141
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
142
|
+
await client.post(`crm/stages/delete/${args.stage_id}`, { company_id: companyId });
|
|
143
|
+
return textResult({ deleted: true, stage_id: args.stage_id });
|
|
144
|
+
}));
|
|
145
|
+
server.registerTool("crm_list_lead_sources", {
|
|
146
|
+
title: "List CRM lead sources",
|
|
147
|
+
description: "List lead sources, for tagging where a lead came from.",
|
|
148
|
+
inputSchema: { company_id: companyIdSchema }
|
|
149
|
+
}, safeHandler(async (args) => {
|
|
150
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
151
|
+
const response = await client.get("crm/lead-sources/all", { company_id: companyId });
|
|
152
|
+
return textResult(response.data);
|
|
153
|
+
}));
|
|
154
|
+
server.registerTool("crm_create_lead_source", {
|
|
155
|
+
title: "Create a CRM lead source",
|
|
156
|
+
description: "Add a lead source.",
|
|
157
|
+
inputSchema: {
|
|
158
|
+
company_id: companyIdSchema,
|
|
159
|
+
source_name: z.string().min(1).max(100),
|
|
160
|
+
source_name_fa: z.string().optional(),
|
|
161
|
+
is_active: z.boolean().optional().default(true),
|
|
162
|
+
num: z.number().optional().default(0)
|
|
163
|
+
}
|
|
164
|
+
}, safeHandler(async (args) => {
|
|
165
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
166
|
+
const response = await client.post("crm/lead-sources/create", {
|
|
167
|
+
company_id: companyId,
|
|
168
|
+
source_name: args.source_name,
|
|
169
|
+
source_name_fa: args.source_name_fa,
|
|
170
|
+
is_active: boolParam(args.is_active),
|
|
171
|
+
num: args.num
|
|
172
|
+
});
|
|
173
|
+
return textResult({ created: true, lead_source: response.data });
|
|
174
|
+
}));
|
|
175
|
+
server.registerTool("crm_list_tags", {
|
|
176
|
+
title: "List CRM tags",
|
|
177
|
+
description: "List tags available to attach to contacts.",
|
|
178
|
+
inputSchema: { company_id: companyIdSchema }
|
|
179
|
+
}, safeHandler(async (args) => {
|
|
180
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
181
|
+
const response = await client.get("crm/tags/all", { company_id: companyId });
|
|
182
|
+
return textResult(response.data);
|
|
183
|
+
}));
|
|
184
|
+
server.registerTool("crm_create_tag", {
|
|
185
|
+
title: "Create a CRM tag",
|
|
186
|
+
description: "Create a tag that can be assigned to contacts.",
|
|
187
|
+
inputSchema: {
|
|
188
|
+
company_id: companyIdSchema,
|
|
189
|
+
name: z.string().min(1).max(100),
|
|
190
|
+
name_fa: z.string().optional(),
|
|
191
|
+
color_code: z.string().max(7).optional()
|
|
192
|
+
}
|
|
193
|
+
}, safeHandler(async (args) => {
|
|
194
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
195
|
+
const response = await client.post("crm/tags/create", {
|
|
196
|
+
company_id: companyId,
|
|
197
|
+
name: args.name,
|
|
198
|
+
name_fa: args.name_fa,
|
|
199
|
+
color_code: args.color_code
|
|
200
|
+
});
|
|
201
|
+
return textResult({ created: true, tag: response.data });
|
|
202
|
+
}));
|
|
203
|
+
server.registerTool("crm_assign_tag", {
|
|
204
|
+
title: "Assign or unassign a CRM tag",
|
|
205
|
+
description: "Attach or detach a tag on a contact.",
|
|
206
|
+
inputSchema: {
|
|
207
|
+
company_id: companyIdSchema,
|
|
208
|
+
contact_id: z.number().int(),
|
|
209
|
+
tag_id: z.number().int(),
|
|
210
|
+
assign: z.boolean().optional().default(true).describe("true attaches, false detaches.")
|
|
211
|
+
}
|
|
212
|
+
}, safeHandler(async (args) => {
|
|
213
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
214
|
+
const path = (args.assign ?? true) ? "crm/tags/assign" : "crm/tags/unassign";
|
|
215
|
+
await client.post(path, { company_id: companyId, contact_id: args.contact_id, tag_id: args.tag_id });
|
|
216
|
+
return textResult({ contact_id: args.contact_id, tag_id: args.tag_id, assigned: args.assign ?? true });
|
|
217
|
+
}));
|
|
218
|
+
server.registerTool("crm_list_custom_fields", {
|
|
219
|
+
title: "List CRM custom field definitions",
|
|
220
|
+
description: "List the custom fields defined for contacts and/or leads, with their type and options.",
|
|
221
|
+
inputSchema: { company_id: companyIdSchema }
|
|
222
|
+
}, safeHandler(async (args) => {
|
|
223
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
224
|
+
const response = await client.get("crm/custom-fields/all", { company_id: companyId });
|
|
225
|
+
return textResult(response.data);
|
|
226
|
+
}));
|
|
227
|
+
server.registerTool("crm_create_custom_field", {
|
|
228
|
+
title: "Create a CRM custom field",
|
|
229
|
+
description: "Define a custom field for contacts and/or leads. Values are later set via " +
|
|
230
|
+
"crm_create_contact/crm_update_contact's custom_field_values.",
|
|
231
|
+
inputSchema: {
|
|
232
|
+
company_id: companyIdSchema,
|
|
233
|
+
applies_to: z.enum(["lead", "contact", "both"]),
|
|
234
|
+
field_key: z
|
|
235
|
+
.string()
|
|
236
|
+
.regex(/^[a-z0-9_]+$/)
|
|
237
|
+
.max(64)
|
|
238
|
+
.describe("Lowercase snake_case identifier, unique per company."),
|
|
239
|
+
label: z.string().min(1).max(100),
|
|
240
|
+
type: z.enum(["text", "textarea", "number", "select", "date", "toggle"]),
|
|
241
|
+
label_fa: z.string().optional(),
|
|
242
|
+
options: z.array(z.string()).optional().describe("Required when type is 'select'."),
|
|
243
|
+
radius_multiplier: z.number().positive().optional().describe("Used only when type is 'number'.")
|
|
244
|
+
}
|
|
245
|
+
}, safeHandler(async (args) => {
|
|
246
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
247
|
+
const response = await client.post("crm/custom-fields/create", {
|
|
248
|
+
company_id: companyId,
|
|
249
|
+
applies_to: args.applies_to,
|
|
250
|
+
field_key: args.field_key,
|
|
251
|
+
label: args.label,
|
|
252
|
+
type: args.type,
|
|
253
|
+
label_fa: args.label_fa,
|
|
254
|
+
options: args.options ? JSON.stringify(args.options) : undefined,
|
|
255
|
+
radius_multiplier: args.radius_multiplier
|
|
256
|
+
});
|
|
257
|
+
return textResult({ created: true, field: response.data });
|
|
258
|
+
}));
|
|
259
|
+
server.registerTool("crm_settings", {
|
|
260
|
+
title: "Get CRM settings",
|
|
261
|
+
description: "Get the CRM module's currency override and default location radius.",
|
|
262
|
+
inputSchema: { company_id: companyIdSchema }
|
|
263
|
+
}, safeHandler(async (args) => {
|
|
264
|
+
const companyId = resolveCompanyId(client, args.company_id);
|
|
265
|
+
const response = await client.get("crm/settings/all", { company_id: companyId });
|
|
266
|
+
return textResult(response.data);
|
|
267
|
+
}));
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=crm-admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crm-admin.js","sourceRoot":"","sources":["../../src/tools/crm-admin.ts"],"names":[],"mappings":"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"}
|