vtiger-mcp 0.1.0 → 0.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.
package/README.md CHANGED
@@ -161,16 +161,37 @@ vtiger update 17x1234 --set description="Revised notes"
161
161
  (`<moduleId>x<recordId>`). Reference fields (owner, `related_to`,
162
162
  `projectid`) expect these ids; the timesheet helpers resolve task names
163
163
  to ids for you.
164
- - **The timesheet module name** in this tool defaults to `TimeControl`.
165
- If your install uses a different module for time tracking, use the
166
- generic `create_record` / `query` tools, or adjust the constants in
167
- `src/core/timesheet.ts`.
164
+ - **The timesheet module is configurable** (see below). It defaults to
165
+ `TimeControl`; point it at your module without touching code.
168
166
  - **Deletes are off by default.** Set `VTIGER_ALLOW_DELETE=true` only if you
169
167
  want the agent/CLI to delete records (and your account has that right).
170
168
  - **Security.** Your access key is a secret — keep it in your local `.env`
171
169
  or client config only. Use HTTPS. Nothing is centralized; each user runs
172
170
  their own copy with their own key.
173
171
 
172
+ ## Configuring the timesheet module (other vtiger installs)
173
+
174
+ The timesheet helpers default to the `TimeControl` module with
175
+ `ProjectTask`/`Project` links. If your install uses different module or
176
+ field names, set these env vars (all optional) — no code changes needed:
177
+
178
+ | Variable | Default | Purpose |
179
+ |---|---|---|
180
+ | `VTIGER_TIMESHEET_MODULE` | `TimeControl` | Time-entry module |
181
+ | `VTIGER_TASK_MODULE` | `ProjectTask` | Module linked from an entry |
182
+ | `VTIGER_PROJECT_MODULE` | `Project` | Project module |
183
+
184
+ Advanced field-name overrides (rarely needed): `VTIGER_TS_DATE_START_FIELD`,
185
+ `VTIGER_TS_DATE_END_FIELD`, `VTIGER_TS_TIME_START_FIELD`,
186
+ `VTIGER_TS_TIME_END_FIELD`, `VTIGER_TS_RELATED_FIELD`, `VTIGER_TS_DESC_FIELD`,
187
+ `VTIGER_TS_HOURSTYPE_FIELD`, `VTIGER_TS_TOTAL_FIELD`, `VTIGER_TS_OWNER_FIELD`,
188
+ `VTIGER_TASK_NAME_FIELD`, `VTIGER_TASK_PROJECT_FIELD`,
189
+ `VTIGER_PROJECT_NAME_FIELD`. See [.env.example](.env.example) for the full
190
+ list and defaults.
191
+
192
+ > Whatever your modules are named, the generic `create_record`,
193
+ > `update_record`, `query`, and `describe_module` tools always work.
194
+
174
195
  ## License
175
196
 
176
197
  [MIT](LICENSE) © ViralP17
package/dist/cli/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import { readFileSync, existsSync } from "node:fs";
3
3
  import { resolve } from "node:path";
4
4
  import { createClientFromEnv } from "../core/client.js";
5
- import { TIMESHEET_MODULE, PROJECT_MODULE, findTasks, buildTimesheetElement, listMyTimesheets, } from "../core/timesheet.js";
5
+ import { timesheetConfigFromEnv, findTasks, listProjects, buildTimesheetElement, listMyTimesheets, } from "../core/timesheet.js";
6
6
  /**
7
7
  * Thin CLI over the shared vtiger core client. Useful for quick testing,
8
8
  * scripting, and for developers who prefer the terminal. Reads the same
@@ -100,6 +100,7 @@ async function main() {
100
100
  return;
101
101
  }
102
102
  const client = createClientFromEnv();
103
+ const tsCfg = timesheetConfigFromEnv();
103
104
  switch (command) {
104
105
  case "whoami": {
105
106
  await client.listTypes();
@@ -160,17 +161,17 @@ async function main() {
160
161
  break;
161
162
  }
162
163
  case "projects":
163
- print(await client.query(`SELECT id, projectname, projectstatus FROM ${PROJECT_MODULE} ORDER BY projectname LIMIT 100;`));
164
+ print(await listProjects(client, tsCfg));
164
165
  break;
165
166
  case "tasks":
166
- print(await findTasks(client, args.positionals[0] ?? ""));
167
+ print(await findTasks(client, tsCfg, args.positionals[0] ?? ""));
167
168
  break;
168
169
  case "log-timesheet": {
169
170
  await client.listTypes(); // ensure login -> userId
170
171
  let taskId;
171
172
  const task = flag(args, "task");
172
173
  if (task) {
173
- const matches = await findTasks(client, task);
174
+ const matches = await findTasks(client, tsCfg, task);
174
175
  if (matches.length === 0)
175
176
  throw new Error(`No task matches "${task}".`);
176
177
  if (matches.length > 1) {
@@ -179,7 +180,7 @@ async function main() {
179
180
  }
180
181
  taskId = matches[0].id;
181
182
  }
182
- const element = buildTimesheetElement({
183
+ const element = buildTimesheetElement(tsCfg, {
183
184
  date: flag(args, "date") ?? new Date().toISOString().slice(0, 10),
184
185
  taskId,
185
186
  startTime: flag(args, "start"),
@@ -189,12 +190,12 @@ async function main() {
189
190
  hoursType: flag(args, "type"),
190
191
  assignedUserId: client.userId ?? undefined,
191
192
  });
192
- print(await client.create(TIMESHEET_MODULE, element));
193
+ print(await client.create(tsCfg.module, element));
193
194
  break;
194
195
  }
195
196
  case "my-timesheets": {
196
197
  await client.listTypes();
197
- print(await listMyTimesheets(client, flag(args, "from"), flag(args, "to")));
198
+ print(await listMyTimesheets(client, tsCfg, flag(args, "from"), flag(args, "to")));
198
199
  break;
199
200
  }
200
201
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,49 @@
1
1
  import { isWebserviceId } from "./vtiger-id.js";
2
- /**
3
- * Helpers for the daily timesheet module. The timesheet module in this
4
- * portal is `TimeControl` (table vtiger_timecontrol) — NOT literally
5
- * "Timesheet".
6
- *
7
- * The LIVE field set (verified via describe against production) is:
8
- * date_start, date_end (date), time_start, time_end (time HH:MM:SS),
9
- * related_to (-> ProjectTask), projectid (-> Project),
10
- * description (activity text), hours_type (picklist: Regular/Extra Hours),
11
- * assigned_user_id (owner, the only MANDATORY field),
12
- * totaltime/total_hour/total_min (computed server-side from the times),
13
- * tc_code (auto). We deliberately do NOT set the computed fields — the
14
- * module's save_module() derives them and rolls the hours up onto the
15
- * linked ProjectTask.
16
- */
17
- export const TIMESHEET_MODULE = "TimeControl";
18
- export const TASK_MODULE = "ProjectTask";
19
- export const PROJECT_MODULE = "Project";
2
+ const DEFAULTS = {
3
+ module: "TimeControl",
4
+ taskModule: "ProjectTask",
5
+ projectModule: "Project",
6
+ fields: {
7
+ dateStart: "date_start",
8
+ dateEnd: "date_end",
9
+ timeStart: "time_start",
10
+ timeEnd: "time_end",
11
+ relatedTo: "related_to",
12
+ description: "description",
13
+ hoursType: "hours_type",
14
+ totalTime: "totaltime",
15
+ owner: "assigned_user_id",
16
+ },
17
+ taskNameField: "projecttaskname",
18
+ taskProjectField: "projectid",
19
+ projectNameField: "projectname",
20
+ };
21
+ /** Read a timesheet config from env vars, falling back to the TimeControl defaults. */
22
+ export function timesheetConfigFromEnv(env = process.env) {
23
+ const pick = (name, fallback) => {
24
+ const v = env[name];
25
+ return v && v.trim() ? v.trim() : fallback;
26
+ };
27
+ return {
28
+ module: pick("VTIGER_TIMESHEET_MODULE", DEFAULTS.module),
29
+ taskModule: pick("VTIGER_TASK_MODULE", DEFAULTS.taskModule),
30
+ projectModule: pick("VTIGER_PROJECT_MODULE", DEFAULTS.projectModule),
31
+ fields: {
32
+ dateStart: pick("VTIGER_TS_DATE_START_FIELD", DEFAULTS.fields.dateStart),
33
+ dateEnd: pick("VTIGER_TS_DATE_END_FIELD", DEFAULTS.fields.dateEnd),
34
+ timeStart: pick("VTIGER_TS_TIME_START_FIELD", DEFAULTS.fields.timeStart),
35
+ timeEnd: pick("VTIGER_TS_TIME_END_FIELD", DEFAULTS.fields.timeEnd),
36
+ relatedTo: pick("VTIGER_TS_RELATED_FIELD", DEFAULTS.fields.relatedTo),
37
+ description: pick("VTIGER_TS_DESC_FIELD", DEFAULTS.fields.description),
38
+ hoursType: pick("VTIGER_TS_HOURSTYPE_FIELD", DEFAULTS.fields.hoursType),
39
+ totalTime: pick("VTIGER_TS_TOTAL_FIELD", DEFAULTS.fields.totalTime),
40
+ owner: pick("VTIGER_TS_OWNER_FIELD", DEFAULTS.fields.owner),
41
+ },
42
+ taskNameField: pick("VTIGER_TASK_NAME_FIELD", DEFAULTS.taskNameField),
43
+ taskProjectField: pick("VTIGER_TASK_PROJECT_FIELD", DEFAULTS.taskProjectField),
44
+ projectNameField: pick("VTIGER_PROJECT_NAME_FIELD", DEFAULTS.projectNameField),
45
+ };
46
+ }
20
47
  /** Escape a value for safe inclusion inside a single-quoted VTQL string literal. */
21
48
  export function escapeVtql(value) {
22
49
  // VTQL is SQL-like; single quotes are the string delimiter. Double them to escape.
@@ -33,7 +60,7 @@ export function normalizeTime(t) {
33
60
  return `${m[1].padStart(2, "0")}:${m[2]}:00`;
34
61
  throw new Error(`Invalid time "${t}" (expected HH:MM or HH:MM:SS)`);
35
62
  }
36
- /** Convert an explicit total ("H:MM" or a number of hours/seconds) to seconds. */
63
+ /** Convert an explicit total ("H:MM" or a number of minutes) to seconds. */
37
64
  export function parseTotalToSeconds(total) {
38
65
  const s = total.trim();
39
66
  const hm = /^(\d{1,2}):(\d{2})$/.exec(s);
@@ -44,67 +71,92 @@ export function parseTotalToSeconds(total) {
44
71
  throw new Error(`Invalid total "${total}" (expected "H:MM" or minutes)`);
45
72
  }
46
73
  /**
47
- * Resolve a project task reference (used for the timesheet `related_to`
48
- * field). Accepts either a webservice id (returned as-is) or a name to
49
- * search for. Returns all matches so the caller can disambiguate.
74
+ * Resolve a task reference (used for the timesheet `related_to` field).
75
+ * Accepts either a webservice id (returned as-is) or a name to search for.
76
+ * Returns all matches so the caller can disambiguate.
50
77
  */
51
- export async function findTasks(client, taskNameOrId) {
78
+ export async function findTasks(client, cfg, taskNameOrId) {
52
79
  const trimmed = taskNameOrId.trim();
53
80
  if (isWebserviceId(trimmed)) {
54
81
  const rec = await client.retrieve(trimmed);
55
- return [{ id: rec.id, name: rec.projecttaskname ?? trimmed, projectId: rec.projectid }];
82
+ return [{ id: rec.id, name: rec[cfg.taskNameField] ?? trimmed, projectId: rec[cfg.taskProjectField] }];
56
83
  }
57
84
  const like = escapeVtql(trimmed);
58
- const rows = await client.query(`SELECT id, projecttaskname, projectid FROM ${TASK_MODULE} WHERE projecttaskname LIKE '%${like}%' ORDER BY projecttaskname LIMIT 25;`);
85
+ const rows = await client.query(`SELECT id, ${cfg.taskNameField}, ${cfg.taskProjectField} FROM ${cfg.taskModule} WHERE ${cfg.taskNameField} LIKE '%${like}%' ORDER BY ${cfg.taskNameField} LIMIT 25;`);
59
86
  return rows.map((r) => ({
60
87
  id: r.id,
61
- name: r.projecttaskname,
62
- projectId: r.projectid,
88
+ name: r[cfg.taskNameField],
89
+ projectId: r[cfg.taskProjectField],
63
90
  }));
64
91
  }
92
+ /** List projects the user can access (id + name). */
93
+ export async function listProjects(client, cfg) {
94
+ return client.query(`SELECT id, ${cfg.projectNameField} FROM ${cfg.projectModule} ORDER BY ${cfg.projectNameField} LIMIT 100;`);
95
+ }
65
96
  /**
66
- * Assemble a TimeControl `element` object for `client.create`. Sets only
67
- * the fields the caller supplied. When start/end times are given, the
68
- * server computes totaltime/total_hour/total_min itself — so we leave
69
- * those alone. An explicit `totalTime` (without times) is written to the
70
- * seconds-based `totaltime` field.
97
+ * Assemble a timesheet `element` object for `client.create`, using the
98
+ * configured field names. When start/end times are given, the server
99
+ * computes the total itself — so we don't set the total field. An explicit
100
+ * `totalTime` (without times) is written to the seconds-based total field.
71
101
  */
72
- export function buildTimesheetElement(input) {
102
+ export function buildTimesheetElement(cfg, input) {
103
+ const f = cfg.fields;
73
104
  const element = {
74
- date_start: input.date,
75
- date_end: input.date,
105
+ [f.dateStart]: input.date,
106
+ [f.dateEnd]: input.date,
76
107
  };
77
108
  if (input.assignedUserId)
78
- element.assigned_user_id = input.assignedUserId;
109
+ element[f.owner] = input.assignedUserId;
79
110
  if (input.taskId)
80
- element.related_to = input.taskId;
111
+ element[f.relatedTo] = input.taskId;
81
112
  if (input.projectId)
82
- element.projectid = input.projectId;
113
+ element[cfg.taskProjectField] = input.projectId;
83
114
  if (input.startTime)
84
- element.time_start = normalizeTime(input.startTime);
115
+ element[f.timeStart] = normalizeTime(input.startTime);
85
116
  if (input.endTime)
86
- element.time_end = normalizeTime(input.endTime);
117
+ element[f.timeEnd] = normalizeTime(input.endTime);
87
118
  if (input.activity)
88
- element.description = input.activity;
119
+ element[f.description] = input.activity;
89
120
  if (input.hoursType)
90
- element.hours_type = input.hoursType;
91
- // Only set totaltime when we can't rely on server computation from times.
121
+ element[f.hoursType] = input.hoursType;
122
+ // Only set the total when we can't rely on server computation from times.
92
123
  if (input.totalTime && !(input.startTime && input.endTime)) {
93
- element.totaltime = parseTotalToSeconds(input.totalTime);
124
+ element[f.totalTime] = parseTotalToSeconds(input.totalTime);
94
125
  }
95
126
  return element;
96
127
  }
128
+ /** Map friendly update fields to the configured column names (for revise). */
129
+ export function buildTimesheetUpdate(cfg, input) {
130
+ const f = cfg.fields;
131
+ const values = {};
132
+ if (input.date) {
133
+ values[f.dateStart] = input.date;
134
+ values[f.dateEnd] = input.date;
135
+ }
136
+ if (input.startTime)
137
+ values[f.timeStart] = normalizeTime(input.startTime);
138
+ if (input.endTime)
139
+ values[f.timeEnd] = normalizeTime(input.endTime);
140
+ if (input.totalTime)
141
+ values[f.totalTime] = parseTotalToSeconds(input.totalTime);
142
+ if (input.activity)
143
+ values[f.description] = input.activity;
144
+ if (input.hoursType)
145
+ values[f.hoursType] = input.hoursType;
146
+ return values;
147
+ }
97
148
  /** List the authenticated user's timesheet entries within a date range. */
98
- export async function listMyTimesheets(client, from, to) {
149
+ export async function listMyTimesheets(client, cfg, from, to) {
150
+ const f = cfg.fields;
99
151
  const clauses = [];
100
152
  const uid = client.userId;
101
153
  if (uid)
102
- clauses.push(`assigned_user_id = '${uid}'`);
154
+ clauses.push(`${f.owner} = '${uid}'`);
103
155
  if (from)
104
- clauses.push(`date_start >= '${escapeVtql(from)}'`);
156
+ clauses.push(`${f.dateStart} >= '${escapeVtql(from)}'`);
105
157
  if (to)
106
- clauses.push(`date_start <= '${escapeVtql(to)}'`);
158
+ clauses.push(`${f.dateStart} <= '${escapeVtql(to)}'`);
107
159
  const where = clauses.length ? ` WHERE ${clauses.join(" AND ")}` : "";
108
- return client.query(`SELECT id, tc_code, date_start, time_start, time_end, totaltime, description, hours_type, related_to FROM ${TIMESHEET_MODULE}${where} ORDER BY date_start DESC LIMIT 100;`);
160
+ return client.query(`SELECT * FROM ${cfg.module}${where} ORDER BY ${f.dateStart} DESC LIMIT 100;`);
109
161
  }
110
162
  //# sourceMappingURL=timesheet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timesheet.js","sourceRoot":"","sources":["../../src/core/timesheet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"timesheet.js","sourceRoot":"","sources":["../../src/core/timesheet.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,9 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
4
  import { z } from "zod";
5
5
  import { createClientFromEnv } from "../core/client.js";
6
- import { TIMESHEET_MODULE, PROJECT_MODULE, findTasks, buildTimesheetElement, listMyTimesheets, } from "../core/timesheet.js";
6
+ import { timesheetConfigFromEnv, findTasks, listProjects, buildTimesheetElement, buildTimesheetUpdate, listMyTimesheets, } from "../core/timesheet.js";
7
+ // Timesheet module/field names (defaults to TimeControl; override via env).
8
+ const tsCfg = timesheetConfigFromEnv();
7
9
  /**
8
10
  * MCP stdio server that exposes the vtiger portal to an AI agent AS the
9
11
  * configured developer. Credentials come from env (VTIGER_URL /
@@ -29,7 +31,7 @@ function fail(err) {
29
31
  const message = err instanceof Error ? err.message : String(err);
30
32
  return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
31
33
  }
32
- const server = new McpServer({ name: "vtiger-mcp", version: "0.1.0" });
34
+ const server = new McpServer({ name: "vtiger-mcp", version: "0.2.0" });
33
35
  /**
34
36
  * Register a tool with uniform error handling. `server.tool` is cast to
35
37
  * sidestep the SDK's heavily-overloaded typings; the runtime contract
@@ -82,11 +84,11 @@ tool("whoami", "Return the authenticated developer's vtiger user id and profile
82
84
  }
83
85
  return ok({ userId: client.userId, user });
84
86
  });
85
- tool("list_my_projects", "List projects the developer can access (id + name), to pick a project for timesheet logging.", {}, async () => ok(await getClient().query(`SELECT id, projectname, projectstatus FROM ${PROJECT_MODULE} ORDER BY projectname LIMIT 100;`)));
86
- tool("list_my_tasks", "List project tasks (id + name) the developer can access. Optionally filter by a project-task name fragment. The task id is what a timesheet's 'related_to' links to.", { nameContains: z.string().optional().describe("Optional substring to match against the task name.") }, async ({ nameContains }) => ok(await findTasks(getClient(), nameContains ?? "")));
87
- tool("log_timesheet", "Log a daily timesheet entry in the TimeControl module for the developer. Resolves a task by name or id, defaults the date to today and the owner to the current user, and computes total time from start/end when not given.", {
87
+ tool("list_my_projects", "List projects the developer can access (id + name), to pick a project for timesheet logging.", {}, async () => ok(await listProjects(getClient(), tsCfg)));
88
+ tool("list_my_tasks", `List tasks (id + name) the developer can access in the ${tsCfg.taskModule} module. Optionally filter by a task-name fragment. The task id is what a timesheet's link field points to.`, { nameContains: z.string().optional().describe("Optional substring to match against the task name.") }, async ({ nameContains }) => ok(await findTasks(getClient(), tsCfg, nameContains ?? "")));
89
+ tool("log_timesheet", `Log a daily timesheet entry in the ${tsCfg.module} module for the developer. Resolves a task by name or id, defaults the date to today and the owner to the current user, and computes total time from start/end when not given.`, {
88
90
  date: z.string().optional().describe("Entry date YYYY-MM-DD. Defaults to today."),
89
- task: z.string().optional().describe("Project task name (searched) or webservice id, linked as related_to."),
91
+ task: z.string().optional().describe("Task name (searched) or webservice id, linked as the entry's related field."),
90
92
  startTime: z.string().optional().describe("Clock start HH:MM, e.g. '10:00'."),
91
93
  endTime: z.string().optional().describe("Clock end HH:MM, e.g. '13:00'."),
92
94
  totalTime: z.string().optional().describe("Explicit total HH:MM; computed from start/end if omitted."),
@@ -97,9 +99,9 @@ tool("log_timesheet", "Log a daily timesheet entry in the TimeControl module for
97
99
  await client.listTypes(); // ensure login -> userId available
98
100
  let taskId;
99
101
  if (args.task) {
100
- const matches = await findTasks(client, args.task);
102
+ const matches = await findTasks(client, tsCfg, args.task);
101
103
  if (matches.length === 0) {
102
- throw new Error(`No project task found matching "${args.task}". Use list_my_tasks to browse.`);
104
+ throw new Error(`No task found matching "${args.task}". Use list_my_tasks to browse.`);
103
105
  }
104
106
  if (matches.length > 1) {
105
107
  return ok({
@@ -110,7 +112,7 @@ tool("log_timesheet", "Log a daily timesheet entry in the TimeControl module for
110
112
  }
111
113
  taskId = matches[0].id;
112
114
  }
113
- const element = buildTimesheetElement({
115
+ const element = buildTimesheetElement(tsCfg, {
114
116
  date: args.date ?? today(),
115
117
  taskId,
116
118
  startTime: args.startTime,
@@ -120,7 +122,7 @@ tool("log_timesheet", "Log a daily timesheet entry in the TimeControl module for
120
122
  hoursType: args.hoursType,
121
123
  assignedUserId: client.userId ?? undefined,
122
124
  });
123
- const created = await client.create(TIMESHEET_MODULE, element);
125
+ const created = await client.create(tsCfg.module, element);
124
126
  return ok({ created });
125
127
  });
126
128
  tool("list_my_timesheets", "List the developer's own timesheet entries, optionally within a date range (YYYY-MM-DD).", {
@@ -129,10 +131,10 @@ tool("list_my_timesheets", "List the developer's own timesheet entries, optional
129
131
  }, async ({ from, to }) => {
130
132
  const client = getClient();
131
133
  await client.listTypes(); // ensure login -> userId available
132
- return ok(await listMyTimesheets(client, from, to));
134
+ return ok(await listMyTimesheets(client, tsCfg, from, to));
133
135
  });
134
- tool("update_timesheet", "Update fields on an existing TimeControl timesheet entry (partial update).", {
135
- id: z.string().describe("Webservice id of the TimeControl record."),
136
+ tool("update_timesheet", `Update fields on an existing ${tsCfg.module} timesheet entry (partial update).`, {
137
+ id: z.string().describe(`Webservice id of the ${tsCfg.module} record.`),
136
138
  date: z.string().optional().describe("New date YYYY-MM-DD."),
137
139
  startTime: z.string().optional(),
138
140
  endTime: z.string().optional(),
@@ -140,21 +142,7 @@ tool("update_timesheet", "Update fields on an existing TimeControl timesheet ent
140
142
  activity: z.string().optional(),
141
143
  hoursType: z.string().optional(),
142
144
  }, async ({ id, date, startTime, endTime, totalTime, activity, hoursType }) => {
143
- const values = {};
144
- if (date) {
145
- values.date_start = date;
146
- values.date_end = date;
147
- }
148
- if (startTime)
149
- values.time_start = startTime;
150
- if (endTime)
151
- values.time_end = endTime;
152
- if (totalTime)
153
- values.totaltime = totalTime;
154
- if (activity)
155
- values.description = activity;
156
- if (hoursType)
157
- values.hours_type = hoursType;
145
+ const values = buildTimesheetUpdate(tsCfg, { date, startTime, endTime, totalTime, activity, hoursType });
158
146
  return ok(await getClient().revise({ id, ...values }));
159
147
  });
160
148
  async function main() {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vtiger-mcp",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "MCP server + CLI for vtiger CRM — log timesheets and create/update records in any module via an AI agent, using each user's own webservice access key (row-level access preserved).",
5
5
  "type": "module",
6
6
  "bin": {