@softeria/ms-365-mcp-server 0.21.1 → 0.22.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.
|
@@ -396,12 +396,35 @@ function findUsedSchemas(openApiSpec) {
|
|
|
396
396
|
const schemasToProcess = [];
|
|
397
397
|
const schemas = openApiSpec.components?.schemas || {};
|
|
398
398
|
const responses = openApiSpec.components?.responses || {};
|
|
399
|
+
const requestBodies = openApiSpec.components?.requestBodies || {};
|
|
399
400
|
const paths = openApiSpec.paths || {};
|
|
400
401
|
|
|
401
402
|
Object.entries(paths).forEach(([, pathItem]) => {
|
|
402
403
|
Object.entries(pathItem).forEach(([, operation]) => {
|
|
403
404
|
if (typeof operation !== 'object') return;
|
|
404
405
|
|
|
406
|
+
if (operation.requestBody?.$ref) {
|
|
407
|
+
const requestBodyName = operation.requestBody.$ref.replace(
|
|
408
|
+
'#/components/requestBodies/',
|
|
409
|
+
''
|
|
410
|
+
);
|
|
411
|
+
const requestBodyDefinition = requestBodies[requestBodyName];
|
|
412
|
+
if (requestBodyDefinition?.content) {
|
|
413
|
+
Object.values(requestBodyDefinition.content).forEach((content) => {
|
|
414
|
+
if (content.schema?.$ref) {
|
|
415
|
+
const schemaName = content.schema.$ref.replace('#/components/schemas/', '');
|
|
416
|
+
schemasToProcess.push(schemaName);
|
|
417
|
+
}
|
|
418
|
+
if (content.schema?.properties) {
|
|
419
|
+
findRefsInObject(content.schema.properties, (ref) => {
|
|
420
|
+
const schemaName = ref.replace('#/components/schemas/', '');
|
|
421
|
+
schemasToProcess.push(schemaName);
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
405
428
|
if (operation.requestBody?.content) {
|
|
406
429
|
Object.values(operation.requestBody.content).forEach((content) => {
|
|
407
430
|
if (content.schema?.$ref) {
|
package/dist/endpoints.json
CHANGED
|
@@ -173,6 +173,12 @@
|
|
|
173
173
|
"toolName": "list-calendars",
|
|
174
174
|
"scopes": ["Calendars.Read"]
|
|
175
175
|
},
|
|
176
|
+
{
|
|
177
|
+
"pathPattern": "/me/findMeetingTimes",
|
|
178
|
+
"method": "post",
|
|
179
|
+
"toolName": "find-meeting-times",
|
|
180
|
+
"workScopes": ["Calendars.Read.Shared"]
|
|
181
|
+
},
|
|
176
182
|
{
|
|
177
183
|
"pathPattern": "/me/drives",
|
|
178
184
|
"method": "get",
|
package/dist/generated/client.js
CHANGED
|
@@ -2416,6 +2416,51 @@ const microsoft_graph_attachmentCollectionResponse = z.object({
|
|
|
2416
2416
|
"@odata.nextLink": z.string().nullable(),
|
|
2417
2417
|
value: z.array(microsoft_graph_attachment)
|
|
2418
2418
|
}).partial().strict();
|
|
2419
|
+
const microsoft_graph_attendeeBase = z.object({
|
|
2420
|
+
emailAddress: microsoft_graph_emailAddress.optional(),
|
|
2421
|
+
type: microsoft_graph_attendeeType.optional()
|
|
2422
|
+
}).strict();
|
|
2423
|
+
const microsoft_graph_locationConstraintItem = z.object({
|
|
2424
|
+
address: microsoft_graph_physicalAddress.optional(),
|
|
2425
|
+
coordinates: microsoft_graph_outlookGeoCoordinates.optional(),
|
|
2426
|
+
displayName: z.string().describe("The name associated with the location.").nullish(),
|
|
2427
|
+
locationEmailAddress: z.string().describe("Optional email address of the location.").nullish(),
|
|
2428
|
+
locationType: microsoft_graph_locationType.optional(),
|
|
2429
|
+
locationUri: z.string().describe("Optional URI representing the location.").nullish(),
|
|
2430
|
+
uniqueId: z.string().describe("For internal use only.").nullish(),
|
|
2431
|
+
uniqueIdType: microsoft_graph_locationUniqueIdType.optional(),
|
|
2432
|
+
resolveAvailability: z.boolean().describe(
|
|
2433
|
+
"If set to true and the specified resource is busy, findMeetingTimes looks for another resource that is free. If set to false and the specified resource is busy, findMeetingTimes returns the resource best ranked in the user's cache without checking if it's free. Default is true."
|
|
2434
|
+
).nullish()
|
|
2435
|
+
}).strict();
|
|
2436
|
+
const microsoft_graph_locationConstraint = z.object({
|
|
2437
|
+
isRequired: z.boolean().describe(
|
|
2438
|
+
"The client requests the service to include in the response a meeting location for the meeting. If this is true and all the resources are busy, findMeetingTimes won't return any meeting time suggestions. If this is false and all the resources are busy, findMeetingTimes would still look for meeting times without locations."
|
|
2439
|
+
).nullish(),
|
|
2440
|
+
locations: z.array(microsoft_graph_locationConstraintItem).describe(
|
|
2441
|
+
"Constraint information for one or more locations that the client requests for the meeting."
|
|
2442
|
+
).optional(),
|
|
2443
|
+
suggestLocation: z.boolean().describe("The client requests the service to suggest one or more meeting locations.").nullish()
|
|
2444
|
+
}).strict();
|
|
2445
|
+
const microsoft_graph_activityDomain = z.enum(["unknown", "work", "personal", "unrestricted"]);
|
|
2446
|
+
const microsoft_graph_timeConstraint = z.object({
|
|
2447
|
+
activityDomain: microsoft_graph_activityDomain.optional(),
|
|
2448
|
+
timeSlots: z.array(microsoft_graph_timeSlot).optional()
|
|
2449
|
+
}).strict();
|
|
2450
|
+
const ReferenceNumeric = z.enum(["-INF", "INF", "NaN"]);
|
|
2451
|
+
const find_meeting_times_Body = z.object({
|
|
2452
|
+
attendees: z.array(microsoft_graph_attendeeBase),
|
|
2453
|
+
locationConstraint: z.union([
|
|
2454
|
+
microsoft_graph_locationConstraint,
|
|
2455
|
+
z.object({}).partial().strict()
|
|
2456
|
+
]),
|
|
2457
|
+
timeConstraint: z.union([microsoft_graph_timeConstraint, z.object({}).partial().strict()]),
|
|
2458
|
+
meetingDuration: z.string().regex(/^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$/).nullable(),
|
|
2459
|
+
maxCandidates: z.number().gte(-2147483648).lte(2147483647).nullable(),
|
|
2460
|
+
isOrganizerOptional: z.boolean().nullable().default(false),
|
|
2461
|
+
returnSuggestionReasons: z.boolean().nullable().default(false),
|
|
2462
|
+
minimumAttendeePercentage: z.union([z.number(), z.string(), ReferenceNumeric])
|
|
2463
|
+
}).partial().strict();
|
|
2419
2464
|
const send_mail_Body = z.object({
|
|
2420
2465
|
Message: microsoft_graph_message.describe(
|
|
2421
2466
|
"[Note: Simplified from 35 properties to 25 most common ones]"
|
|
@@ -3423,6 +3468,13 @@ const schemas = {
|
|
|
3423
3468
|
microsoft_graph_mailFolderCollectionResponse,
|
|
3424
3469
|
microsoft_graph_messageCollectionResponse,
|
|
3425
3470
|
microsoft_graph_attachmentCollectionResponse,
|
|
3471
|
+
microsoft_graph_attendeeBase,
|
|
3472
|
+
microsoft_graph_locationConstraintItem,
|
|
3473
|
+
microsoft_graph_locationConstraint,
|
|
3474
|
+
microsoft_graph_activityDomain,
|
|
3475
|
+
microsoft_graph_timeConstraint,
|
|
3476
|
+
ReferenceNumeric,
|
|
3477
|
+
find_meeting_times_Body,
|
|
3426
3478
|
send_mail_Body,
|
|
3427
3479
|
microsoft_graph_externalLink,
|
|
3428
3480
|
microsoft_graph_notebookLinks,
|
|
@@ -6018,6 +6070,40 @@ open extensions or extended properties, and how to specify extended properties.`
|
|
|
6018
6070
|
}
|
|
6019
6071
|
]
|
|
6020
6072
|
},
|
|
6073
|
+
{
|
|
6074
|
+
method: "post",
|
|
6075
|
+
path: "/me/findMeetingTimes",
|
|
6076
|
+
alias: "find-meeting-times",
|
|
6077
|
+
description: `Suggest meeting times and locations based on organizer and attendee availability, and time or location constraints specified as parameters. If findMeetingTimes cannot return any meeting suggestions, the response would indicate a reason in the emptySuggestionsReason property.
|
|
6078
|
+
Based on this value, you can better adjust the parameters and call findMeetingTimes again. The algorithm used to suggest meeting times and locations undergoes fine-tuning from time to time. In scenarios like test environments where the input parameters and calendar data remain static, expect that the suggested results may differ over time.`,
|
|
6079
|
+
requestFormat: "json",
|
|
6080
|
+
parameters: [
|
|
6081
|
+
{
|
|
6082
|
+
name: "body",
|
|
6083
|
+
description: `Action parameters`,
|
|
6084
|
+
type: "Body",
|
|
6085
|
+
schema: find_meeting_times_Body
|
|
6086
|
+
}
|
|
6087
|
+
],
|
|
6088
|
+
response: z.void(),
|
|
6089
|
+
errors: [
|
|
6090
|
+
{
|
|
6091
|
+
status: NaN,
|
|
6092
|
+
description: `Success`,
|
|
6093
|
+
schema: z.object({}).partial().strict()
|
|
6094
|
+
},
|
|
6095
|
+
{
|
|
6096
|
+
status: NaN,
|
|
6097
|
+
description: `error`,
|
|
6098
|
+
schema: microsoft_graph_ODataErrors_ODataError
|
|
6099
|
+
},
|
|
6100
|
+
{
|
|
6101
|
+
status: NaN,
|
|
6102
|
+
description: `error`,
|
|
6103
|
+
schema: microsoft_graph_ODataErrors_ODataError
|
|
6104
|
+
}
|
|
6105
|
+
]
|
|
6106
|
+
},
|
|
6021
6107
|
{
|
|
6022
6108
|
method: "get",
|
|
6023
6109
|
path: "/me/joinedTeams",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softeria/ms-365-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": " A Model Context Protocol (MCP) server for interacting with Microsoft 365 and Office services through the Graph API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
package/src/endpoints.json
CHANGED
|
@@ -173,6 +173,12 @@
|
|
|
173
173
|
"toolName": "list-calendars",
|
|
174
174
|
"scopes": ["Calendars.Read"]
|
|
175
175
|
},
|
|
176
|
+
{
|
|
177
|
+
"pathPattern": "/me/findMeetingTimes",
|
|
178
|
+
"method": "post",
|
|
179
|
+
"toolName": "find-meeting-times",
|
|
180
|
+
"workScopes": ["Calendars.Read.Shared"]
|
|
181
|
+
},
|
|
176
182
|
{
|
|
177
183
|
"pathPattern": "/me/drives",
|
|
178
184
|
"method": "get",
|