@hvgllc/hvgerp-mcp 3.6.0 → 3.7.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/hvgerp-mcp.mjs +38 -2
- package/package.json +1 -1
package/hvgerp-mcp.mjs
CHANGED
|
@@ -50691,6 +50691,27 @@ function endFollowsStart(start, end, allDay) {
|
|
|
50691
50691
|
function isNullableOf(value, check) {
|
|
50692
50692
|
return value === null || typeof value === "string" && check(value);
|
|
50693
50693
|
}
|
|
50694
|
+
var MEETING_TITLE_MAX_CODE_POINTS = 500;
|
|
50695
|
+
var MEETING_URL_MAX_LENGTH = 2048;
|
|
50696
|
+
var VISIBLE_CHARACTER = /(?![\p{Default_Ignorable_Code_Point}⠀])[\p{L}\p{N}\p{P}\p{S}]/u;
|
|
50697
|
+
var URL_HIDDEN_CHARACTER = /[\s\p{Cc}\p{Cf}]/u;
|
|
50698
|
+
function isMeetingTitle(value) {
|
|
50699
|
+
return VISIBLE_CHARACTER.test(value) && codePointLength2(value) <= MEETING_TITLE_MAX_CODE_POINTS;
|
|
50700
|
+
}
|
|
50701
|
+
function canonicalMeetingUrl(value) {
|
|
50702
|
+
if (value.length > MEETING_URL_MAX_LENGTH * 2) return void 0;
|
|
50703
|
+
if (codePointLength2(value) > MEETING_URL_MAX_LENGTH) return void 0;
|
|
50704
|
+
if (URL_HIDDEN_CHARACTER.test(value)) return void 0;
|
|
50705
|
+
let parsed;
|
|
50706
|
+
try {
|
|
50707
|
+
parsed = new URL(value);
|
|
50708
|
+
} catch {
|
|
50709
|
+
return void 0;
|
|
50710
|
+
}
|
|
50711
|
+
const valid = parsed.protocol === "https:" && parsed.hostname !== "" && parsed.username === "" && parsed.password === "";
|
|
50712
|
+
if (!valid) return void 0;
|
|
50713
|
+
return parsed.href.length <= MEETING_URL_MAX_LENGTH ? parsed.href : null;
|
|
50714
|
+
}
|
|
50694
50715
|
function validateRecurrence(recurrence, firstDate) {
|
|
50695
50716
|
const picked = pickKeys(recurrence, RECURRENCE_KEYS);
|
|
50696
50717
|
assertShape(
|
|
@@ -50867,6 +50888,21 @@ function pickMeetingFields(result, args) {
|
|
|
50867
50888
|
assertShape(typeof picked[key] === "string" && picked[key] !== "");
|
|
50868
50889
|
}
|
|
50869
50890
|
for (const key of forbidden) assertShape(picked[key] == null);
|
|
50891
|
+
if (Object.hasOwn(result, "title")) {
|
|
50892
|
+
assertShape(isNullableOf(result.title, isMeetingTitle));
|
|
50893
|
+
picked.title = result.title;
|
|
50894
|
+
}
|
|
50895
|
+
if (Object.hasOwn(result, "meeting_url")) {
|
|
50896
|
+
const raw2 = result.meeting_url;
|
|
50897
|
+
if (raw2 === null) {
|
|
50898
|
+
picked.meeting_url = null;
|
|
50899
|
+
} else {
|
|
50900
|
+
assertShape(typeof raw2 === "string");
|
|
50901
|
+
const url = canonicalMeetingUrl(raw2);
|
|
50902
|
+
assertShape(url !== void 0);
|
|
50903
|
+
picked.meeting_url = url;
|
|
50904
|
+
}
|
|
50905
|
+
}
|
|
50870
50906
|
const [startKey, endKey] = picked.all_day ? ["start_date", "end_date_exclusive"] : ["starts_at", "ends_at"];
|
|
50871
50907
|
if (typeof picked[endKey] === "string") {
|
|
50872
50908
|
assertShape(
|
|
@@ -50981,7 +51017,7 @@ function readTemporal(input, key) {
|
|
|
50981
51017
|
var calendarTools = [
|
|
50982
51018
|
{
|
|
50983
51019
|
name: "erpnext_meeting_get",
|
|
50984
|
-
description: "Freshly read one calendar meeting from ERPNext
|
|
51020
|
+
description: "Freshly read one calendar meeting from ERPNext: schedule, recurrence and occurrences in a window, plus the title and meeting link (meeting_url) when ERPNext provides them; either may be null or absent. Use it after a meeting event to fetch the current state. Name the meeting only from a non-null title and share a link only from a non-null meeting_url; never invent either. Returns no description or participants. A deleted meeting returns only event_id, revision and deleted=true. Always reads live data; results are never cached.",
|
|
50985
51021
|
category: "operations",
|
|
50986
51022
|
inputSchema: {
|
|
50987
51023
|
type: "object",
|
|
@@ -55910,7 +55946,7 @@ function installClaudeCodeStdioCompat(cacheHints) {
|
|
|
55910
55946
|
}
|
|
55911
55947
|
|
|
55912
55948
|
// src/version.ts
|
|
55913
|
-
var SERVER_VERSION = "3.
|
|
55949
|
+
var SERVER_VERSION = "3.7.0";
|
|
55914
55950
|
|
|
55915
55951
|
// src/instructions.ts
|
|
55916
55952
|
var HEADER_OPENING = `This server exposes a live ERPNext/Frappe instance (HVG Group).
|