@littlebearapps/outlook-assistant 3.3.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/.env.example +22 -0
- package/LICENSE +21 -0
- package/README.md +422 -0
- package/advanced/index.js +652 -0
- package/auth/index.js +32 -0
- package/auth/oauth-server.js +233 -0
- package/auth/token-manager.js +105 -0
- package/auth/token-storage.js +359 -0
- package/auth/tools.js +159 -0
- package/calendar/accept.js +72 -0
- package/calendar/cancel.js +72 -0
- package/calendar/create.js +115 -0
- package/calendar/decline.js +72 -0
- package/calendar/delete.js +67 -0
- package/calendar/index.js +130 -0
- package/calendar/list.js +108 -0
- package/categories/index.js +955 -0
- package/config.js +95 -0
- package/contacts/index.js +754 -0
- package/email/attachments.js +365 -0
- package/email/conversations.js +666 -0
- package/email/delta.js +210 -0
- package/email/export.js +572 -0
- package/email/folder-utils.js +192 -0
- package/email/headers.js +344 -0
- package/email/index.js +537 -0
- package/email/list.js +136 -0
- package/email/mark-as-read.js +114 -0
- package/email/mime.js +286 -0
- package/email/read.js +161 -0
- package/email/search.js +628 -0
- package/email/send.js +169 -0
- package/folder/create.js +137 -0
- package/folder/delete.js +108 -0
- package/folder/index.js +112 -0
- package/folder/list.js +289 -0
- package/folder/move.js +186 -0
- package/folder/stats.js +322 -0
- package/index.js +162 -0
- package/llms.txt +76 -0
- package/outlook-auth-server.js +384 -0
- package/package.json +97 -0
- package/rules/create.js +273 -0
- package/rules/index.js +276 -0
- package/rules/list.js +216 -0
- package/settings/index.js +678 -0
- package/utils/field-presets.js +311 -0
- package/utils/graph-api.js +268 -0
- package/utils/mock-data.js +154 -0
- package/utils/odata-helpers.js +33 -0
- package/utils/response-formatter.js +457 -0
- package/utils/safety.js +123 -0
package/calendar/list.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List events functionality
|
|
3
|
+
*/
|
|
4
|
+
const config = require('../config');
|
|
5
|
+
const { callGraphAPI } = require('../utils/graph-api');
|
|
6
|
+
const { ensureAuthenticated } = require('../auth');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* List events handler
|
|
10
|
+
* @param {object} args - Tool arguments
|
|
11
|
+
* @returns {object} - MCP response
|
|
12
|
+
*/
|
|
13
|
+
async function handleListEvents(args) {
|
|
14
|
+
const count = Math.min(args.count || 10, config.MAX_RESULT_COUNT);
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
// Get access token
|
|
18
|
+
const accessToken = await ensureAuthenticated();
|
|
19
|
+
|
|
20
|
+
// Build API endpoint
|
|
21
|
+
let endpoint = 'me/events';
|
|
22
|
+
|
|
23
|
+
// Add query parameters
|
|
24
|
+
const queryParams = {
|
|
25
|
+
$top: count,
|
|
26
|
+
$orderby: 'start/dateTime',
|
|
27
|
+
$filter: `start/dateTime ge '${new Date().toISOString()}'`,
|
|
28
|
+
$select: config.CALENDAR_SELECT_FIELDS,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// Make API call
|
|
32
|
+
const response = await callGraphAPI(
|
|
33
|
+
accessToken,
|
|
34
|
+
'GET',
|
|
35
|
+
endpoint,
|
|
36
|
+
null,
|
|
37
|
+
queryParams
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
if (!response.value || response.value.length === 0) {
|
|
41
|
+
return {
|
|
42
|
+
content: [
|
|
43
|
+
{
|
|
44
|
+
type: 'text',
|
|
45
|
+
text: 'No calendar events found.',
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Format results
|
|
52
|
+
const tz = config.DEFAULT_TIMEZONE;
|
|
53
|
+
const eventList = response.value
|
|
54
|
+
.map((event, index) => {
|
|
55
|
+
const startDt = event.start.dateTime.endsWith('Z')
|
|
56
|
+
? event.start.dateTime
|
|
57
|
+
: event.start.dateTime + 'Z';
|
|
58
|
+
const endDt = event.end.dateTime.endsWith('Z')
|
|
59
|
+
? event.end.dateTime
|
|
60
|
+
: event.end.dateTime + 'Z';
|
|
61
|
+
const startDate = new Date(startDt).toLocaleString('en-AU', {
|
|
62
|
+
timeZone: tz,
|
|
63
|
+
dateStyle: 'medium',
|
|
64
|
+
timeStyle: 'short',
|
|
65
|
+
});
|
|
66
|
+
const endDate = new Date(endDt).toLocaleString('en-AU', {
|
|
67
|
+
timeZone: tz,
|
|
68
|
+
dateStyle: 'medium',
|
|
69
|
+
timeStyle: 'short',
|
|
70
|
+
});
|
|
71
|
+
const location = event.location.displayName || 'No location';
|
|
72
|
+
|
|
73
|
+
return `${index + 1}. ${event.subject} - Location: ${location}\nStart: ${startDate}\nEnd: ${endDate}\nSummary: ${event.bodyPreview}\nID: ${event.id}\n`;
|
|
74
|
+
})
|
|
75
|
+
.join('\n');
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
content: [
|
|
79
|
+
{
|
|
80
|
+
type: 'text',
|
|
81
|
+
text: `Found ${response.value.length} events:\n\n${eventList}`,
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
};
|
|
85
|
+
} catch (error) {
|
|
86
|
+
if (error.message === 'Authentication required') {
|
|
87
|
+
return {
|
|
88
|
+
content: [
|
|
89
|
+
{
|
|
90
|
+
type: 'text',
|
|
91
|
+
text: "Authentication required. Please use the 'authenticate' tool first.",
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return {
|
|
98
|
+
content: [
|
|
99
|
+
{
|
|
100
|
+
type: 'text',
|
|
101
|
+
text: `Error listing events: ${error.message}`,
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
module.exports = handleListEvents;
|