@mcp-monorepo/ics 1.0.1 → 1.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/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/event-store.d.ts +12 -1
- package/dist/lib/event-store.d.ts.map +1 -1
- package/dist/lib/event-store.js +38 -19
- package/dist/lib/event-store.js.map +1 -1
- package/dist/lib/format-date.d.ts +1 -1
- package/dist/lib/format-date.d.ts.map +1 -1
- package/dist/lib/format-date.js +3 -1
- package/dist/lib/format-date.js.map +1 -1
- package/dist/lib/recurrrence.d.ts.map +1 -1
- package/dist/lib/recurrrence.js +25 -4
- package/dist/lib/recurrrence.js.map +1 -1
- package/dist/lib/types.d.ts +8 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/tools/fetch-events.js +2 -2
- package/dist/tools/fetch-events.js.map +1 -1
- package/dist/tools/search-events.js +2 -2
- package/dist/tools/search-events.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createMcpServer } from '@mcp-monorepo/shared';
|
|
3
3
|
import { logger } from '@mcp-monorepo/shared';
|
|
4
|
-
import {
|
|
4
|
+
import { getRawEvents } from './lib/event-store.js';
|
|
5
5
|
import { registerFetchEventsTool } from './tools/fetch-events.js';
|
|
6
6
|
import { registerGetCurrentDatetimeTool } from './tools/get-current-datetime.js';
|
|
7
7
|
import { registerSearchEventsTool } from './tools/search-events.js';
|
|
@@ -11,6 +11,10 @@ createMcpServer({
|
|
|
11
11
|
title: 'ICS Calendar MCP Server',
|
|
12
12
|
tools: [registerGetCurrentDatetimeTool, registerFetchEventsTool, registerSearchEventsTool],
|
|
13
13
|
}).then(() => logger.error);
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
getRawEvents()
|
|
15
|
+
.refresh()
|
|
16
|
+
.then(() => logger.error);
|
|
17
|
+
setTimeout(() => getRawEvents()
|
|
18
|
+
.refresh()
|
|
19
|
+
.then(() => logger.error), 1000 * 60 * 60);
|
|
16
20
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAE7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAA;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAEnE,eAAe,CAAC;IACd,IAAI,EAAE,KAAK;IACX,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;IACpC,KAAK,EAAE,yBAAyB;IAChC,KAAK,EAAE,CAAC,8BAA8B,EAAE,uBAAuB,EAAE,wBAAwB,CAAC;CAC3F,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAE3B,YAAY,EAAE;KACX,OAAO,EAAE;KACT,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC3B,UAAU,CACR,GAAG,EAAE,CACH,YAAY,EAAE;KACX,OAAO,EAAE;KACT,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAC7B,IAAI,GAAG,EAAE,GAAG,EAAE,CACf,CAAA"}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { RefreshablePromise } from '@mcp-monorepo/shared';
|
|
2
|
+
import { type VEvent } from 'node-ical';
|
|
2
3
|
import { type CalendarSource, type RawIcalEvent } from './types.js';
|
|
4
|
+
export declare const throwForNoIcsUrls: () => never;
|
|
3
5
|
export declare const getIcsUrls: () => CalendarSource[];
|
|
4
6
|
export declare const parseIcsContent: (icsContent: string, source: string) => Promise<RawIcalEvent[]>;
|
|
5
|
-
export declare const
|
|
7
|
+
export declare const convertEvent: (event: VEvent, source: string) => RawIcalEvent;
|
|
8
|
+
export declare function refreshEvents(): Promise<{
|
|
9
|
+
events: RawIcalEvent[];
|
|
10
|
+
errors: string[];
|
|
11
|
+
}>;
|
|
12
|
+
/**
|
|
13
|
+
* Gets the singleton instance of the RefreshablePromise for raw ICAL events.
|
|
14
|
+
* The instance is created on the first call.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getRawEvents(): RefreshablePromise<{
|
|
6
17
|
events: RawIcalEvent[];
|
|
7
18
|
errors: string[];
|
|
8
19
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-store.d.ts","sourceRoot":"","sources":["../../src/lib/event-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"event-store.d.ts","sourceRoot":"","sources":["../../src/lib/event-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE1E,OAAa,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAkB,MAAM,YAAY,CAAA;AAEnF,eAAO,MAAM,iBAAiB,QAAO,KAEpC,CAAA;AAED,eAAO,MAAM,UAAU,QAAO,cAAc,EAsB3C,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,YAAY,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,YAAY,EAAE,CAGhG,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,YAsB5D,CAAA;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,MAAM,EAAE,YAAY,EAAE,CAAA;IACtB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAC,CAgDD;AAID;;;GAGG;AACH,wBAAgB,YAAY;YANwB,YAAY,EAAE;YAAU,MAAM,EAAE;GAWnF"}
|
package/dist/lib/event-store.js
CHANGED
|
@@ -3,6 +3,9 @@ import { dirname, join } from 'path';
|
|
|
3
3
|
import { findProjectRoot, RefreshablePromise } from '@mcp-monorepo/shared';
|
|
4
4
|
import { logger } from '@mcp-monorepo/shared';
|
|
5
5
|
import ical from 'node-ical';
|
|
6
|
+
export const throwForNoIcsUrls = () => {
|
|
7
|
+
throw new Error('No valid ICS URLs provided in environment variables.');
|
|
8
|
+
};
|
|
6
9
|
export const getIcsUrls = () => {
|
|
7
10
|
const envVars = process.env;
|
|
8
11
|
const calendarSources = [];
|
|
@@ -20,30 +23,36 @@ export const getIcsUrls = () => {
|
|
|
20
23
|
}
|
|
21
24
|
});
|
|
22
25
|
if (calendarSources.length === 0) {
|
|
23
|
-
|
|
26
|
+
throwForNoIcsUrls();
|
|
24
27
|
}
|
|
25
28
|
return calendarSources;
|
|
26
29
|
};
|
|
27
30
|
export const parseIcsContent = async (icsContent, source) => {
|
|
28
31
|
const entries = Object.values(await ical.async.parseICS(icsContent));
|
|
29
|
-
return entries
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
32
|
+
return entries.filter((e) => e.type === 'VEVENT').map((event) => convertEvent(event, source));
|
|
33
|
+
};
|
|
34
|
+
export const convertEvent = (event, source) => {
|
|
35
|
+
let recurrences = undefined;
|
|
36
|
+
if (event.recurrences) {
|
|
37
|
+
recurrences = Object.fromEntries(Object.entries(event.recurrences).map(([key, rec]) => [key, convertEvent(rec, source)]));
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
uid: event.uid,
|
|
41
|
+
summary: event.summary,
|
|
42
|
+
description: event.description,
|
|
43
|
+
location: event.location,
|
|
44
|
+
dtstart: event.start,
|
|
45
|
+
dtend: event.end,
|
|
46
|
+
allDay: event.datetype === 'date',
|
|
47
|
+
source,
|
|
48
|
+
rrule: event.rrule,
|
|
49
|
+
rruleOptions: event.rrule ? event.rrule.origOptions : undefined,
|
|
50
|
+
exdate: event.exdate,
|
|
51
|
+
recurrences,
|
|
52
|
+
status: event.status,
|
|
53
|
+
};
|
|
45
54
|
};
|
|
46
|
-
async function refreshEvents() {
|
|
55
|
+
export async function refreshEvents() {
|
|
47
56
|
const sources = getIcsUrls();
|
|
48
57
|
logger.info('Refreshing events from: ', sources);
|
|
49
58
|
const events = [];
|
|
@@ -84,5 +93,15 @@ async function refreshEvents() {
|
|
|
84
93
|
errors,
|
|
85
94
|
};
|
|
86
95
|
}
|
|
87
|
-
|
|
96
|
+
let rawEventsInstance;
|
|
97
|
+
/**
|
|
98
|
+
* Gets the singleton instance of the RefreshablePromise for raw ICAL events.
|
|
99
|
+
* The instance is created on the first call.
|
|
100
|
+
*/
|
|
101
|
+
export function getRawEvents() {
|
|
102
|
+
if (!rawEventsInstance) {
|
|
103
|
+
rawEventsInstance = new RefreshablePromise(refreshEvents);
|
|
104
|
+
}
|
|
105
|
+
return rawEventsInstance;
|
|
106
|
+
}
|
|
88
107
|
//# sourceMappingURL=event-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-store.js","sourceRoot":"","sources":["../../src/lib/event-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAEpC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,IAAqB,MAAM,WAAW,CAAA;AAI7C,MAAM,CAAC,MAAM,UAAU,GAAG,GAAqB,EAAE;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAA;IAC3B,MAAM,eAAe,GAAqB,EAAE,CAAA;IAE5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnC,MAAM,UAAU,GAAG,WAAW,CAAA;QAC9B,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;YACxB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;gBACrE,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;gBAC7C,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;YACrC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAA;YACxE,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,
|
|
1
|
+
{"version":3,"file":"event-store.js","sourceRoot":"","sources":["../../src/lib/event-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function formatDate(date: Date, allDay?: boolean): string;
|
|
1
|
+
export declare function formatDate(date: Date, allDay?: boolean, timeZone?: string): string;
|
|
2
2
|
//# sourceMappingURL=format-date.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-date.d.ts","sourceRoot":"","sources":["../../src/lib/format-date.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,UAAQ,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"format-date.d.ts","sourceRoot":"","sources":["../../src/lib/format-date.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,UAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAmBhF"}
|
package/dist/lib/format-date.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
export function formatDate(date, allDay = false) {
|
|
1
|
+
export function formatDate(date, allDay = false, timeZone) {
|
|
2
2
|
if (allDay) {
|
|
3
3
|
return new Date(date).toLocaleDateString('en-US', {
|
|
4
4
|
weekday: 'long',
|
|
5
5
|
year: 'numeric',
|
|
6
6
|
month: 'long',
|
|
7
7
|
day: 'numeric',
|
|
8
|
+
timeZone,
|
|
8
9
|
});
|
|
9
10
|
}
|
|
10
11
|
return date.toLocaleString('en-US', {
|
|
@@ -14,6 +15,7 @@ export function formatDate(date, allDay = false) {
|
|
|
14
15
|
day: 'numeric',
|
|
15
16
|
hour: '2-digit',
|
|
16
17
|
minute: '2-digit',
|
|
18
|
+
timeZone,
|
|
17
19
|
});
|
|
18
20
|
}
|
|
19
21
|
//# sourceMappingURL=format-date.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-date.js","sourceRoot":"","sources":["../../src/lib/format-date.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,MAAM,GAAG,KAAK;
|
|
1
|
+
{"version":3,"file":"format-date.js","sourceRoot":"","sources":["../../src/lib/format-date.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,MAAM,GAAG,KAAK,EAAE,QAAiB;IACtE,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;YAChD,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,SAAS;YACd,QAAQ;SACT,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QAClC,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,QAAQ;KACT,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recurrrence.d.ts","sourceRoot":"","sources":["../../src/lib/recurrrence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAqB7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"recurrrence.d.ts","sourceRoot":"","sources":["../../src/lib/recurrrence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAqB7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,aAAa,EAAE,CAkEzG"}
|
package/dist/lib/recurrrence.js
CHANGED
|
@@ -24,24 +24,45 @@ export function resolveRecurrence(events, startDate, endDate) {
|
|
|
24
24
|
allDay: event.allDay,
|
|
25
25
|
source: event.source,
|
|
26
26
|
});
|
|
27
|
+
const getExceptionTimestamps = (event) => {
|
|
28
|
+
const exdateTimes = event.exdate ? Object.values(event.exdate).map((d) => d.getTime()) : [];
|
|
29
|
+
const cancelledRecurrenceTimes = event.recurrences
|
|
30
|
+
? Object.values(event.recurrences)
|
|
31
|
+
.filter((r) => r.status === 'CANCELLED')
|
|
32
|
+
.map((r) => r.dtstart.getTime())
|
|
33
|
+
: [];
|
|
34
|
+
return [...exdateTimes, ...cancelledRecurrenceTimes];
|
|
35
|
+
};
|
|
27
36
|
const expandSingleEvent = (event) => {
|
|
28
37
|
if (!event.rrule) {
|
|
29
|
-
|
|
38
|
+
if (event.dtstart >= startDate && event.dtstart <= endDate) {
|
|
39
|
+
return [createCalendarEvent(event)];
|
|
40
|
+
}
|
|
41
|
+
return [];
|
|
30
42
|
}
|
|
31
43
|
try {
|
|
32
44
|
const recurrences = event.rrule.between(startDate, endDate);
|
|
33
45
|
if (recurrences.length === 0) {
|
|
34
46
|
return event.dtstart >= startDate && event.dtstart <= endDate ? [createCalendarEvent(event)] : [];
|
|
35
47
|
}
|
|
48
|
+
const exceptionTimes = getExceptionTimestamps(event);
|
|
36
49
|
const duration = event.dtend && event.dtstart ? event.dtend.getTime() - event.dtstart.getTime() : 0;
|
|
37
|
-
return recurrences
|
|
50
|
+
return recurrences
|
|
51
|
+
.map((recurrenceDate) => {
|
|
38
52
|
const adjustedStart = getAdjustedRecurrenceDate(event.rruleOptions, event.dtstart, recurrenceDate);
|
|
53
|
+
if (exceptionTimes.includes(adjustedStart.getTime())) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
39
56
|
const adjustedEnd = duration ? new Date(adjustedStart.getTime() + duration) : undefined;
|
|
40
57
|
return createCalendarEvent(event, adjustedStart, adjustedEnd, adjustedStart.getTime().toString());
|
|
41
|
-
})
|
|
58
|
+
})
|
|
59
|
+
.filter((e) => e !== undefined);
|
|
42
60
|
}
|
|
43
61
|
catch {
|
|
44
|
-
|
|
62
|
+
if (event.dtstart >= startDate && event.dtstart <= endDate) {
|
|
63
|
+
return [createCalendarEvent(event)];
|
|
64
|
+
}
|
|
65
|
+
return [];
|
|
45
66
|
}
|
|
46
67
|
};
|
|
47
68
|
return events.flatMap(expandSingleEvent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recurrrence.js","sourceRoot":"","sources":["../../src/lib/recurrrence.ts"],"names":[],"mappings":"AAEA,SAAS,yBAAyB,CAChC,gBAA8D,EAC9D,UAAgB,EAChB,UAAgB;IAEhB,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAA;YACzE,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,UAAU,CAAA;QACnB,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAA;IACjD,MAAM,SAAS,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAA;IAChD,MAAM,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;IACzC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,UAAU,GAAG,KAAK,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAsB,EAAE,SAAe,EAAE,OAAa;IACtF,MAAM,mBAAmB,GAAG,CAC1B,KAAmB,EACnB,OAAc,EACd,KAAY,EACZ,SAAkB,EACH,EAAE,CAAC,CAAC;QACnB,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG;QACxD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO;QACjC,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,KAAK;QAC3B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAA;IAEF,MAAM,iBAAiB,GAAG,CAAC,KAAmB,EAAmB,EAAE;QACjE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"recurrrence.js","sourceRoot":"","sources":["../../src/lib/recurrrence.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type VEventStatus } from 'node-ical';
|
|
1
2
|
export interface CalendarEvent {
|
|
2
3
|
uid: string;
|
|
3
4
|
summary: string;
|
|
@@ -31,6 +32,13 @@ export interface RawIcalEvent {
|
|
|
31
32
|
tzid?: string;
|
|
32
33
|
dtstart: Date;
|
|
33
34
|
};
|
|
35
|
+
exdate?: {
|
|
36
|
+
[key: string]: Date;
|
|
37
|
+
};
|
|
38
|
+
recurrences?: {
|
|
39
|
+
[key: string]: RawIcalEvent;
|
|
40
|
+
};
|
|
41
|
+
status?: VEventStatus;
|
|
34
42
|
}
|
|
35
43
|
export interface CalendarSource {
|
|
36
44
|
name: string;
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,IAAI,CAAA;IACb,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,CAAA;IAC3C,WAAW,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,IAAI,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CACvE;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,IAAI,CAAA;IACb,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,YAAY,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,IAAI,CAAA;KAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA;AAE7C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,IAAI,CAAA;IACb,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,CAAA;IAC3C,WAAW,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,IAAI,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CACvE;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,IAAI,CAAA;IACb,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,YAAY,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,IAAI,CAAA;KAAE,CAAA;IAC/C,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IAChC,WAAW,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;KAAE,CAAA;IAC7C,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { registerTool } from '@mcp-monorepo/shared';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
3
|
+
import { getRawEvents } from '../lib/event-store.js';
|
|
4
4
|
import { filterEvents } from '../lib/filter-events.js';
|
|
5
5
|
import { formatDate } from '../lib/format-date.js';
|
|
6
6
|
import { resolveRecurrence } from '../lib/recurrrence.js';
|
|
@@ -33,7 +33,7 @@ export const registerFetchEventsTool = (server) => registerTool(server, {
|
|
|
33
33
|
const end = new Date(endDate + 'T23:59:59');
|
|
34
34
|
if (start > end)
|
|
35
35
|
throw new Error('Error: Start date must be before end date');
|
|
36
|
-
const events = await
|
|
36
|
+
const events = await getRawEvents();
|
|
37
37
|
const expandedEvents = resolveRecurrence(events.events, start, end);
|
|
38
38
|
const filteredEvents = filterEvents(expandedEvents, start, end);
|
|
39
39
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-events.js","sourceRoot":"","sources":["../../src/tools/fetch-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"fetch-events.js","sourceRoot":"","sources":["../../src/tools/fetch-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { registerTool } from '@mcp-monorepo/shared';
|
|
2
2
|
import { performKeywordSearch } from '@mcp-monorepo/shared';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import {
|
|
4
|
+
import { getRawEvents } from '../lib/event-store.js';
|
|
5
5
|
import { formatDate } from '../lib/format-date.js';
|
|
6
6
|
export const registerSearchEventsTool = (server) => registerTool(server, {
|
|
7
7
|
name: 'search-events',
|
|
@@ -34,7 +34,7 @@ export const registerSearchEventsTool = (server) => registerTool(server, {
|
|
|
34
34
|
if (!query.trim()) {
|
|
35
35
|
throw new Error('Search query cannot be empty');
|
|
36
36
|
}
|
|
37
|
-
const events = await
|
|
37
|
+
const events = await getRawEvents();
|
|
38
38
|
const results = performKeywordSearch(query, events.events, (event) => [event.summary, event.description, event.location, event.source], (a, b) => new Date(a.dtstart).getTime() - new Date(b.dtstart).getTime());
|
|
39
39
|
// Limit results based on the specified `limit`
|
|
40
40
|
const limitedResults = results.slice(0, limit);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-events.js","sourceRoot":"","sources":["../../src/tools/search-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"search-events.js","sourceRoot":"","sources":["../../src/tools/search-events.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-monorepo/ics",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "MCP server for calendar tools using ICS/ical feeds",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"bin": {
|
|
9
|
-
"mcp-
|
|
9
|
+
"@mcp-monorepo/ics": "./dist/index.js"
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
12
|
"dist"
|