@softeria/ms-365-mcp-server 0.63.2 → 0.65.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 +2 -0
- package/dist/endpoints.json +20 -0
- package/dist/generated/client.js +133 -34
- package/logs/mcp-server.log +10 -10
- package/package.json +1 -1
- package/src/endpoints.json +20 -0
package/README.md
CHANGED
|
@@ -553,6 +553,8 @@ Parent directories are created automatically. Files are written with `0600` perm
|
|
|
553
553
|
|
|
554
554
|
> **Security note**: File-based token storage writes sensitive credentials to disk. Ensure the chosen directory has appropriate access controls. The OS credential store (keytar) is preferred when available.
|
|
555
555
|
|
|
556
|
+
> **Hosted/sandboxed environments** (e.g. Anthropic Cowork): Set `MS365_MCP_TOKEN_CACHE_PATH` and `MS365_MCP_SELECTED_ACCOUNT_PATH` to a persistent mount so tokens survive between sessions.
|
|
557
|
+
|
|
556
558
|
## Azure Key Vault Integration
|
|
557
559
|
|
|
558
560
|
For production deployments, you can store secrets in Azure Key Vault instead of environment variables. This is particularly useful for Azure Container Apps with managed identity.
|
package/dist/endpoints.json
CHANGED
|
@@ -133,6 +133,13 @@
|
|
|
133
133
|
"scopes": ["Mail.ReadWrite"],
|
|
134
134
|
"llmTip": "Max 3MB. Body requires @odata.type: {\"@odata.type\": \"#microsoft.graph.fileAttachment\", \"name\": \"file.pdf\", \"contentBytes\": \"<base64>\"}."
|
|
135
135
|
},
|
|
136
|
+
{
|
|
137
|
+
"pathPattern": "/me/messages/{message-id}/attachments/createUploadSession",
|
|
138
|
+
"method": "post",
|
|
139
|
+
"toolName": "create-mail-attachment-upload-session",
|
|
140
|
+
"scopes": ["Mail.ReadWrite"],
|
|
141
|
+
"llmTip": "For large attachments (3-150MB). Body: { AttachmentItem: { attachmentType: 'file', name: 'report.pdf', size: 5000000 } }. Returns a pre-authenticated uploadUrl for direct PUT of file bytes."
|
|
142
|
+
},
|
|
136
143
|
{
|
|
137
144
|
"pathPattern": "/me/messages/{message-id}/attachments",
|
|
138
145
|
"method": "get",
|
|
@@ -341,6 +348,12 @@
|
|
|
341
348
|
"supportsExpandExtendedProperties": true,
|
|
342
349
|
"llmTip": "Returns expanded recurring event instances (not just seriesMaster) within a date range for a specific calendar. Requires startDateTime and endDateTime query parameters in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Each instance includes seriesMasterId and type (occurrence/exception) fields for recurring event linkage. Use fetchAllPages=true to retrieve all results when there are many events. To find Teams meetings, use $filter=isOnlineMeeting eq true. Teams meetings include a joinWebUrl property needed for transcript access via list-online-meetings."
|
|
343
350
|
},
|
|
351
|
+
{
|
|
352
|
+
"pathPattern": "/me/calendar/getSchedule",
|
|
353
|
+
"method": "post",
|
|
354
|
+
"toolName": "get-schedule",
|
|
355
|
+
"workScopes": ["Calendars.Read"]
|
|
356
|
+
},
|
|
344
357
|
{
|
|
345
358
|
"pathPattern": "/me/calendars/{calendar-id}/events/{event-id}/instances",
|
|
346
359
|
"method": "get",
|
|
@@ -428,6 +441,13 @@
|
|
|
428
441
|
"scopes": ["Files.ReadWrite"],
|
|
429
442
|
"llmTip": "Max 4MB. For new files use path format: /items/root:/path/to/file.txt:/content. Overwrites existing files without warning."
|
|
430
443
|
},
|
|
444
|
+
{
|
|
445
|
+
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/createUploadSession",
|
|
446
|
+
"method": "post",
|
|
447
|
+
"toolName": "create-upload-session",
|
|
448
|
+
"scopes": ["Files.ReadWrite"],
|
|
449
|
+
"llmTip": "For large file uploads (no size limit). Returns a pre-authenticated uploadUrl for direct PUT of file bytes. For new files use path: /items/{parentId}:/{fileName}:/createUploadSession. Body (optional): { item: { '@microsoft.graph.conflictBehavior': 'rename' } }."
|
|
450
|
+
},
|
|
431
451
|
{
|
|
432
452
|
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}",
|
|
433
453
|
"method": "patch",
|
package/dist/generated/client.js
CHANGED
|
@@ -748,6 +748,18 @@ const microsoft_graph_driveItemCollectionResponse = z.object({
|
|
|
748
748
|
"@odata.nextLink": z.string().nullable(),
|
|
749
749
|
value: z.array(microsoft_graph_driveItem)
|
|
750
750
|
}).partial().passthrough();
|
|
751
|
+
const create_upload_session_Body = z.object({ item: z.object({}).partial().passthrough() }).partial().passthrough();
|
|
752
|
+
const microsoft_graph_uploadSession = z.object({
|
|
753
|
+
expirationDateTime: z.string().regex(
|
|
754
|
+
/^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$/
|
|
755
|
+
).datetime({ offset: true }).describe(
|
|
756
|
+
"The date and time in UTC that the upload session expires. The complete file must be uploaded before this expiration time is reached. Each fragment uploaded during the session extends the expiration time."
|
|
757
|
+
).nullish(),
|
|
758
|
+
nextExpectedRanges: z.array(z.string().nullable()).describe(
|
|
759
|
+
"A collection of byte ranges that the server is missing for the file. These ranges are zero indexed and of the format 'start-end' (for example '0-26' to indicate the first 27 bytes of the file). When uploading files as Outlook attachments, instead of a collection of ranges, this property always indicates a single value '{start}', the location in the file where the next upload should begin."
|
|
760
|
+
).optional(),
|
|
761
|
+
uploadUrl: z.string().describe("The URL endpoint that accepts PUT requests for byte ranges of the file.").nullish()
|
|
762
|
+
}).passthrough();
|
|
751
763
|
const microsoft_graph_workbookIcon = z.object({
|
|
752
764
|
index: z.number().gte(-2147483648).lte(2147483647).describe("The index of the icon in the given set.").optional(),
|
|
753
765
|
set: z.string().describe(
|
|
@@ -1334,6 +1346,68 @@ const microsoft_graph_conversationThreadCollectionResponse = z.object({
|
|
|
1334
1346
|
value: z.array(microsoft_graph_conversationThread)
|
|
1335
1347
|
}).partial().passthrough();
|
|
1336
1348
|
const reply_to_group_thread_Body = z.object({ Post: microsoft_graph_post }).partial().passthrough();
|
|
1349
|
+
const get_schedule_Body = z.object({
|
|
1350
|
+
Schedules: z.array(z.string().nullable()),
|
|
1351
|
+
EndTime: z.union([microsoft_graph_dateTimeTimeZone, z.object({}).partial().passthrough()]),
|
|
1352
|
+
StartTime: z.union([microsoft_graph_dateTimeTimeZone, z.object({}).partial().passthrough()]),
|
|
1353
|
+
AvailabilityViewInterval: z.number().gte(-2147483648).lte(2147483647).nullable()
|
|
1354
|
+
}).partial().passthrough();
|
|
1355
|
+
const BaseCollectionPaginationCountResponse = z.object({ "@odata.count": z.number().int().nullable(), "@odata.nextLink": z.string().nullable() }).partial().passthrough();
|
|
1356
|
+
const microsoft_graph_freeBusyError = z.object({
|
|
1357
|
+
message: z.string().describe("Describes the error.").nullish(),
|
|
1358
|
+
responseCode: z.string().describe(
|
|
1359
|
+
"The response code from querying for the availability of the user, distribution list, or resource."
|
|
1360
|
+
).nullish()
|
|
1361
|
+
}).passthrough();
|
|
1362
|
+
const microsoft_graph_freeBusyStatus = z.enum([
|
|
1363
|
+
"unknown",
|
|
1364
|
+
"free",
|
|
1365
|
+
"tentative",
|
|
1366
|
+
"busy",
|
|
1367
|
+
"oof",
|
|
1368
|
+
"workingElsewhere"
|
|
1369
|
+
]);
|
|
1370
|
+
const microsoft_graph_scheduleItem = z.object({
|
|
1371
|
+
end: microsoft_graph_dateTimeTimeZone.optional(),
|
|
1372
|
+
isPrivate: z.boolean().describe(
|
|
1373
|
+
"The sensitivity of the corresponding event. True if the event is marked private, false otherwise. Optional."
|
|
1374
|
+
).nullish(),
|
|
1375
|
+
location: z.string().describe("The location where the corresponding event is held or attended from. Optional.").nullish(),
|
|
1376
|
+
start: microsoft_graph_dateTimeTimeZone.optional(),
|
|
1377
|
+
status: microsoft_graph_freeBusyStatus.optional(),
|
|
1378
|
+
subject: z.string().describe("The corresponding event's subject line. Optional.").nullish()
|
|
1379
|
+
}).passthrough();
|
|
1380
|
+
const microsoft_graph_dayOfWeek = z.enum([
|
|
1381
|
+
"sunday",
|
|
1382
|
+
"monday",
|
|
1383
|
+
"tuesday",
|
|
1384
|
+
"wednesday",
|
|
1385
|
+
"thursday",
|
|
1386
|
+
"friday",
|
|
1387
|
+
"saturday"
|
|
1388
|
+
]);
|
|
1389
|
+
const microsoft_graph_timeZoneBase = z.object({
|
|
1390
|
+
name: z.string().describe(
|
|
1391
|
+
"The name of a time zone. It can be a standard time zone name such as 'Hawaii-Aleutian Standard Time', or 'Customized Time Zone' for a custom time zone."
|
|
1392
|
+
).nullish()
|
|
1393
|
+
}).passthrough();
|
|
1394
|
+
const microsoft_graph_workingHours = z.object({
|
|
1395
|
+
daysOfWeek: z.array(z.union([microsoft_graph_dayOfWeek, z.object({}).partial().passthrough()])).describe("The days of the week on which the user works.").optional(),
|
|
1396
|
+
endTime: z.string().regex(/^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?$/).describe("The time of the day that the user stops working.").nullish(),
|
|
1397
|
+
startTime: z.string().regex(/^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?$/).describe("The time of the day that the user starts working.").nullish(),
|
|
1398
|
+
timeZone: microsoft_graph_timeZoneBase.optional()
|
|
1399
|
+
}).passthrough();
|
|
1400
|
+
const microsoft_graph_scheduleInformation = z.object({
|
|
1401
|
+
availabilityView: z.string().describe(
|
|
1402
|
+
"Represents a merged view of availability of all the items in scheduleItems. The view consists of time slots. Availability during each time slot is indicated with: 0= free or working elswhere, 1= tentative, 2= busy, 3= out of office.Note: Working elsewhere is set to 0 instead of 4 for backward compatibility. For details, see the Q&A and Exchange 2007 and Exchange 2010 do not use the WorkingElsewhere value."
|
|
1403
|
+
).nullish(),
|
|
1404
|
+
error: microsoft_graph_freeBusyError.optional(),
|
|
1405
|
+
scheduleId: z.string().describe(
|
|
1406
|
+
"An SMTP address of the user, distribution list, or resource, identifying an instance of scheduleInformation."
|
|
1407
|
+
).nullish(),
|
|
1408
|
+
scheduleItems: z.array(microsoft_graph_scheduleItem).describe("Contains the items that describe the availability of the user or resource.").optional(),
|
|
1409
|
+
workingHours: microsoft_graph_workingHours.optional()
|
|
1410
|
+
}).passthrough();
|
|
1337
1411
|
const microsoft_graph_onlineMeetingProviderType = z.enum([
|
|
1338
1412
|
"unknown",
|
|
1339
1413
|
"skypeForBusiness",
|
|
@@ -1430,14 +1504,6 @@ const microsoft_graph_location = z.object({
|
|
|
1430
1504
|
uniqueId: z.string().describe("For internal use only.").nullish(),
|
|
1431
1505
|
uniqueIdType: microsoft_graph_locationUniqueIdType.optional()
|
|
1432
1506
|
}).passthrough();
|
|
1433
|
-
const microsoft_graph_freeBusyStatus = z.enum([
|
|
1434
|
-
"unknown",
|
|
1435
|
-
"free",
|
|
1436
|
-
"tentative",
|
|
1437
|
-
"busy",
|
|
1438
|
-
"oof",
|
|
1439
|
-
"workingElsewhere"
|
|
1440
|
-
]);
|
|
1441
1507
|
const microsoft_graph_sensitivity = z.enum(["normal", "personal", "private", "confidential"]);
|
|
1442
1508
|
const microsoft_graph_importance = z.enum(["low", "normal", "high"]);
|
|
1443
1509
|
const microsoft_graph_attendeeType = z.enum(["required", "optional", "resource"]);
|
|
@@ -1467,15 +1533,6 @@ const microsoft_graph_attendee = z.object({
|
|
|
1467
1533
|
proposedNewTime: microsoft_graph_timeSlot.optional(),
|
|
1468
1534
|
status: microsoft_graph_responseStatus.optional()
|
|
1469
1535
|
}).passthrough();
|
|
1470
|
-
const microsoft_graph_dayOfWeek = z.enum([
|
|
1471
|
-
"sunday",
|
|
1472
|
-
"monday",
|
|
1473
|
-
"tuesday",
|
|
1474
|
-
"wednesday",
|
|
1475
|
-
"thursday",
|
|
1476
|
-
"friday",
|
|
1477
|
-
"saturday"
|
|
1478
|
-
]);
|
|
1479
1536
|
const microsoft_graph_weekIndex = z.enum(["first", "second", "third", "fourth", "last"]);
|
|
1480
1537
|
const microsoft_graph_recurrencePatternType = z.enum([
|
|
1481
1538
|
"daily",
|
|
@@ -2494,17 +2551,6 @@ const microsoft_graph_userPurpose = z.enum([
|
|
|
2494
2551
|
"others",
|
|
2495
2552
|
"unknownFutureValue"
|
|
2496
2553
|
]);
|
|
2497
|
-
const microsoft_graph_timeZoneBase = z.object({
|
|
2498
|
-
name: z.string().describe(
|
|
2499
|
-
"The name of a time zone. It can be a standard time zone name such as 'Hawaii-Aleutian Standard Time', or 'Customized Time Zone' for a custom time zone."
|
|
2500
|
-
).nullish()
|
|
2501
|
-
}).passthrough();
|
|
2502
|
-
const microsoft_graph_workingHours = z.object({
|
|
2503
|
-
daysOfWeek: z.array(z.union([microsoft_graph_dayOfWeek, z.object({}).partial().passthrough()])).describe("The days of the week on which the user works.").optional(),
|
|
2504
|
-
endTime: z.string().regex(/^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?$/).describe("The time of the day that the user stops working.").nullish(),
|
|
2505
|
-
startTime: z.string().regex(/^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?$/).describe("The time of the day that the user starts working.").nullish(),
|
|
2506
|
-
timeZone: microsoft_graph_timeZoneBase.optional()
|
|
2507
|
-
}).passthrough();
|
|
2508
2554
|
const microsoft_graph_mailboxSettings = z.object({
|
|
2509
2555
|
archiveFolder: z.string().describe("Folder ID of an archive folder for the user.").nullish(),
|
|
2510
2556
|
automaticRepliesSetting: microsoft_graph_automaticRepliesSetting.optional(),
|
|
@@ -3609,7 +3655,6 @@ const microsoft_graph_searchRequest = z.object({
|
|
|
3609
3655
|
).optional()
|
|
3610
3656
|
}).passthrough();
|
|
3611
3657
|
const search_query_Body = z.object({ requests: z.array(microsoft_graph_searchRequest) }).partial().passthrough();
|
|
3612
|
-
const BaseCollectionPaginationCountResponse = z.object({ "@odata.count": z.number().int().nullable(), "@odata.nextLink": z.string().nullable() }).partial().passthrough();
|
|
3613
3658
|
const microsoft_graph_searchBucket = z.object({
|
|
3614
3659
|
aggregationFilterToken: z.string().describe(
|
|
3615
3660
|
"A token containing the encoded filter to aggregate search matches by the specific key value. To use the filter, pass the token as part of the aggregationFilter property in a searchRequest object, in the format '{field}:/'{aggregationFilterToken}/''. See an example."
|
|
@@ -3865,6 +3910,8 @@ const schemas = {
|
|
|
3865
3910
|
microsoft_graph_pendingOperations,
|
|
3866
3911
|
microsoft_graph_driveItem,
|
|
3867
3912
|
microsoft_graph_driveItemCollectionResponse,
|
|
3913
|
+
create_upload_session_Body,
|
|
3914
|
+
microsoft_graph_uploadSession,
|
|
3868
3915
|
microsoft_graph_workbookIcon,
|
|
3869
3916
|
microsoft_graph_workbookFilterCriteria,
|
|
3870
3917
|
microsoft_graph_workbookFilter,
|
|
@@ -3923,6 +3970,15 @@ const schemas = {
|
|
|
3923
3970
|
microsoft_graph_conversationCollectionResponse,
|
|
3924
3971
|
microsoft_graph_conversationThreadCollectionResponse,
|
|
3925
3972
|
reply_to_group_thread_Body,
|
|
3973
|
+
get_schedule_Body,
|
|
3974
|
+
BaseCollectionPaginationCountResponse,
|
|
3975
|
+
microsoft_graph_freeBusyError,
|
|
3976
|
+
microsoft_graph_freeBusyStatus,
|
|
3977
|
+
microsoft_graph_scheduleItem,
|
|
3978
|
+
microsoft_graph_dayOfWeek,
|
|
3979
|
+
microsoft_graph_timeZoneBase,
|
|
3980
|
+
microsoft_graph_workingHours,
|
|
3981
|
+
microsoft_graph_scheduleInformation,
|
|
3926
3982
|
microsoft_graph_onlineMeetingProviderType,
|
|
3927
3983
|
microsoft_graph_calendarColor,
|
|
3928
3984
|
microsoft_graph_calendarRoleType,
|
|
@@ -3933,7 +3989,6 @@ const schemas = {
|
|
|
3933
3989
|
microsoft_graph_locationType,
|
|
3934
3990
|
microsoft_graph_locationUniqueIdType,
|
|
3935
3991
|
microsoft_graph_location,
|
|
3936
|
-
microsoft_graph_freeBusyStatus,
|
|
3937
3992
|
microsoft_graph_sensitivity,
|
|
3938
3993
|
microsoft_graph_importance,
|
|
3939
3994
|
microsoft_graph_attendeeType,
|
|
@@ -3941,7 +3996,6 @@ const schemas = {
|
|
|
3941
3996
|
microsoft_graph_responseType,
|
|
3942
3997
|
microsoft_graph_responseStatus,
|
|
3943
3998
|
microsoft_graph_attendee,
|
|
3944
|
-
microsoft_graph_dayOfWeek,
|
|
3945
3999
|
microsoft_graph_weekIndex,
|
|
3946
4000
|
microsoft_graph_recurrencePatternType,
|
|
3947
4001
|
microsoft_graph_recurrencePattern,
|
|
@@ -4031,8 +4085,6 @@ const schemas = {
|
|
|
4031
4085
|
microsoft_graph_delegateMeetingMessageDeliveryOptions,
|
|
4032
4086
|
microsoft_graph_localeInfo,
|
|
4033
4087
|
microsoft_graph_userPurpose,
|
|
4034
|
-
microsoft_graph_timeZoneBase,
|
|
4035
|
-
microsoft_graph_workingHours,
|
|
4036
4088
|
microsoft_graph_mailboxSettings,
|
|
4037
4089
|
microsoft_graph_messageRuleActions,
|
|
4038
4090
|
microsoft_graph_messageActionFlag,
|
|
@@ -4143,7 +4195,6 @@ const schemas = {
|
|
|
4143
4195
|
microsoft_graph_sortProperty,
|
|
4144
4196
|
microsoft_graph_searchRequest,
|
|
4145
4197
|
search_query_Body,
|
|
4146
|
-
BaseCollectionPaginationCountResponse,
|
|
4147
4198
|
microsoft_graph_searchBucket,
|
|
4148
4199
|
microsoft_graph_searchAggregation,
|
|
4149
4200
|
microsoft_graph_entity,
|
|
@@ -4604,6 +4655,22 @@ const endpoints = makeApi([
|
|
|
4604
4655
|
],
|
|
4605
4656
|
response: z.void()
|
|
4606
4657
|
},
|
|
4658
|
+
{
|
|
4659
|
+
method: "post",
|
|
4660
|
+
path: "/drives/:driveId/items/:driveItemId/createUploadSession",
|
|
4661
|
+
alias: "create-upload-session",
|
|
4662
|
+
description: `Invoke action createUploadSession`,
|
|
4663
|
+
requestFormat: "json",
|
|
4664
|
+
parameters: [
|
|
4665
|
+
{
|
|
4666
|
+
name: "body",
|
|
4667
|
+
description: `Action parameters`,
|
|
4668
|
+
type: "Body",
|
|
4669
|
+
schema: create_upload_session_Body
|
|
4670
|
+
}
|
|
4671
|
+
],
|
|
4672
|
+
response: z.void()
|
|
4673
|
+
},
|
|
4607
4674
|
{
|
|
4608
4675
|
method: "get",
|
|
4609
4676
|
path: "/drives/:driveId/items/:driveItemId/workbook/tables",
|
|
@@ -5011,6 +5078,22 @@ const endpoints = makeApi([
|
|
|
5011
5078
|
],
|
|
5012
5079
|
response: z.void()
|
|
5013
5080
|
},
|
|
5081
|
+
{
|
|
5082
|
+
method: "post",
|
|
5083
|
+
path: "/me/calendar/getSchedule",
|
|
5084
|
+
alias: "get-schedule",
|
|
5085
|
+
description: `Get the free/busy availability information for a collection of users, distributions lists, or resources (rooms or equipment) for a specified time period.`,
|
|
5086
|
+
requestFormat: "json",
|
|
5087
|
+
parameters: [
|
|
5088
|
+
{
|
|
5089
|
+
name: "body",
|
|
5090
|
+
description: `Action parameters`,
|
|
5091
|
+
type: "Body",
|
|
5092
|
+
schema: get_schedule_Body
|
|
5093
|
+
}
|
|
5094
|
+
],
|
|
5095
|
+
response: z.void()
|
|
5096
|
+
},
|
|
5014
5097
|
{
|
|
5015
5098
|
method: "get",
|
|
5016
5099
|
path: "/me/calendars",
|
|
@@ -6927,6 +7010,22 @@ resource.`,
|
|
|
6927
7010
|
],
|
|
6928
7011
|
response: z.void()
|
|
6929
7012
|
},
|
|
7013
|
+
{
|
|
7014
|
+
method: "post",
|
|
7015
|
+
path: "/me/messages/:messageId/attachments/createUploadSession",
|
|
7016
|
+
alias: "create-mail-attachment-upload-session",
|
|
7017
|
+
description: `Create an upload session that allows an app to iteratively upload ranges of a file, so as to attach the file to the specified Outlook item. The item can be a message or event. Use this approach to attach a file if the file size is between 3 MB and 150 MB. To attach a file that's smaller than 3 MB, do a POST operation on the attachments navigation property of the Outlook item; see how to do this for a message or for an event. As part of the response, this action returns an upload URL that you can use in subsequent sequential PUT queries. Request headers for each PUT operation let you specify the exact range of bytes to be uploaded. This allows transfer to be resumed, in case the network connection is dropped during upload. The following are the steps to attach a file to an Outlook item using an upload session: See attach large files to Outlook messages or events for an example.`,
|
|
7018
|
+
requestFormat: "json",
|
|
7019
|
+
parameters: [
|
|
7020
|
+
{
|
|
7021
|
+
name: "body",
|
|
7022
|
+
description: `Action parameters`,
|
|
7023
|
+
type: "Body",
|
|
7024
|
+
schema: z.object({ AttachmentItem: z.object({}).partial().passthrough() }).partial().passthrough()
|
|
7025
|
+
}
|
|
7026
|
+
],
|
|
7027
|
+
response: z.void()
|
|
7028
|
+
},
|
|
6930
7029
|
{
|
|
6931
7030
|
method: "post",
|
|
6932
7031
|
path: "/me/messages/:messageId/createForward",
|
package/logs/mcp-server.log
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
2026-04-05
|
|
2
|
-
2026-04-05
|
|
3
|
-
2026-04-05
|
|
4
|
-
2026-04-05
|
|
5
|
-
2026-04-05
|
|
6
|
-
2026-04-05
|
|
7
|
-
2026-04-05
|
|
8
|
-
2026-04-05
|
|
9
|
-
2026-04-05
|
|
10
|
-
2026-04-05
|
|
1
|
+
2026-04-05 10:00:41 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me
|
|
2
|
+
2026-04-05 10:00:41 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me
|
|
3
|
+
2026-04-05 10:00:41 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me
|
|
4
|
+
2026-04-05 10:00:41 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me/messages
|
|
5
|
+
2026-04-05 10:00:41 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me/calendar
|
|
6
|
+
2026-04-05 10:00:43 INFO: Using environment variables for secrets
|
|
7
|
+
2026-04-05 10:00:43 INFO: Using environment variables for secrets
|
|
8
|
+
2026-04-05 10:00:43 INFO: Using environment variables for secrets
|
|
9
|
+
2026-04-05 10:00:43 INFO: Using environment variables for secrets
|
|
10
|
+
2026-04-05 10:00:43 INFO: Using environment variables for secrets
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softeria/ms-365-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.65.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
|
@@ -133,6 +133,13 @@
|
|
|
133
133
|
"scopes": ["Mail.ReadWrite"],
|
|
134
134
|
"llmTip": "Max 3MB. Body requires @odata.type: {\"@odata.type\": \"#microsoft.graph.fileAttachment\", \"name\": \"file.pdf\", \"contentBytes\": \"<base64>\"}."
|
|
135
135
|
},
|
|
136
|
+
{
|
|
137
|
+
"pathPattern": "/me/messages/{message-id}/attachments/createUploadSession",
|
|
138
|
+
"method": "post",
|
|
139
|
+
"toolName": "create-mail-attachment-upload-session",
|
|
140
|
+
"scopes": ["Mail.ReadWrite"],
|
|
141
|
+
"llmTip": "For large attachments (3-150MB). Body: { AttachmentItem: { attachmentType: 'file', name: 'report.pdf', size: 5000000 } }. Returns a pre-authenticated uploadUrl for direct PUT of file bytes."
|
|
142
|
+
},
|
|
136
143
|
{
|
|
137
144
|
"pathPattern": "/me/messages/{message-id}/attachments",
|
|
138
145
|
"method": "get",
|
|
@@ -341,6 +348,12 @@
|
|
|
341
348
|
"supportsExpandExtendedProperties": true,
|
|
342
349
|
"llmTip": "Returns expanded recurring event instances (not just seriesMaster) within a date range for a specific calendar. Requires startDateTime and endDateTime query parameters in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Each instance includes seriesMasterId and type (occurrence/exception) fields for recurring event linkage. Use fetchAllPages=true to retrieve all results when there are many events. To find Teams meetings, use $filter=isOnlineMeeting eq true. Teams meetings include a joinWebUrl property needed for transcript access via list-online-meetings."
|
|
343
350
|
},
|
|
351
|
+
{
|
|
352
|
+
"pathPattern": "/me/calendar/getSchedule",
|
|
353
|
+
"method": "post",
|
|
354
|
+
"toolName": "get-schedule",
|
|
355
|
+
"workScopes": ["Calendars.Read"]
|
|
356
|
+
},
|
|
344
357
|
{
|
|
345
358
|
"pathPattern": "/me/calendars/{calendar-id}/events/{event-id}/instances",
|
|
346
359
|
"method": "get",
|
|
@@ -428,6 +441,13 @@
|
|
|
428
441
|
"scopes": ["Files.ReadWrite"],
|
|
429
442
|
"llmTip": "Max 4MB. For new files use path format: /items/root:/path/to/file.txt:/content. Overwrites existing files without warning."
|
|
430
443
|
},
|
|
444
|
+
{
|
|
445
|
+
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}/createUploadSession",
|
|
446
|
+
"method": "post",
|
|
447
|
+
"toolName": "create-upload-session",
|
|
448
|
+
"scopes": ["Files.ReadWrite"],
|
|
449
|
+
"llmTip": "For large file uploads (no size limit). Returns a pre-authenticated uploadUrl for direct PUT of file bytes. For new files use path: /items/{parentId}:/{fileName}:/createUploadSession. Body (optional): { item: { '@microsoft.graph.conflictBehavior': 'rename' } }."
|
|
450
|
+
},
|
|
431
451
|
{
|
|
432
452
|
"pathPattern": "/drives/{drive-id}/items/{driveItem-id}",
|
|
433
453
|
"method": "patch",
|