@softeria/ms-365-mcp-server 0.46.2 → 0.47.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.
@@ -792,6 +792,27 @@
792
792
  "returnDownloadUrl": true,
793
793
  "llmTip": "Returns a temporary download URL for the meeting recording in MP4 format. Use the download URL to access the video file. The recording may be large — do not attempt to stream it inline."
794
794
  },
795
+ {
796
+ "pathPattern": "/me/onlineMeetings/{onlineMeeting-id}/attendanceReports",
797
+ "method": "get",
798
+ "toolName": "list-meeting-attendance-reports",
799
+ "workScopes": ["OnlineMeetingArtifact.Read.All"],
800
+ "llmTip": "Lists attendance reports for a meeting. Each report has meetingStartDateTime, meetingEndDateTime, totalParticipantCount. For recurring meetings, there is one report per occurrence. Get the meeting ID first via list-online-meetings."
801
+ },
802
+ {
803
+ "pathPattern": "/me/onlineMeetings/{onlineMeeting-id}/attendanceReports/{meetingAttendanceReport-id}",
804
+ "method": "get",
805
+ "toolName": "get-meeting-attendance-report",
806
+ "workScopes": ["OnlineMeetingArtifact.Read.All"],
807
+ "llmTip": "Gets a specific attendance report with totalParticipantCount, meetingStartDateTime, meetingEndDateTime."
808
+ },
809
+ {
810
+ "pathPattern": "/me/onlineMeetings/{onlineMeeting-id}/attendanceReports/{meetingAttendanceReport-id}/attendanceRecords",
811
+ "method": "get",
812
+ "toolName": "list-meeting-attendance-records",
813
+ "workScopes": ["OnlineMeetingArtifact.Read.All"],
814
+ "llmTip": "Lists individual attendance records for a meeting report. Each record has: identity (displayName), emailAddress, role (Organizer/Presenter/Attendee), totalAttendanceInSeconds, and attendanceIntervals with joinDateTime/leaveDateTime. Use to determine who attended, how long, and when they joined/left."
815
+ },
795
816
  {
796
817
  "pathPattern": "/groups/{group-id}/conversations",
797
818
  "method": "get",
@@ -2873,6 +2873,69 @@ const microsoft_graph_onlineMeetingCollectionResponse = z.object({
2873
2873
  "@odata.nextLink": z.string().nullable(),
2874
2874
  value: z.array(microsoft_graph_onlineMeeting)
2875
2875
  }).partial().passthrough();
2876
+ const microsoft_graph_virtualEventExternalInformation = z.object({
2877
+ applicationId: z.string().describe("Identifier of the application that hosts the externalEventId. Read-only.").nullish(),
2878
+ externalEventId: z.string().describe(
2879
+ "The identifier for a virtualEventExternalInformation object that associates the virtual event with an event ID in an external application. This association bundles all the information (both supported and not supported in virtualEvent) into one virtual event object. Optional. If set, the maximum supported length is 256 characters."
2880
+ ).nullish()
2881
+ }).passthrough();
2882
+ const microsoft_graph_attendanceInterval = z.object({
2883
+ durationInSeconds: z.number().gte(-2147483648).lte(2147483647).describe(
2884
+ "Duration of the meeting interval in seconds; that is, the difference between joinDateTime and leaveDateTime."
2885
+ ).nullish(),
2886
+ joinDateTime: z.string().regex(
2887
+ /^[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])$/
2888
+ ).datetime({ offset: true }).describe("The time the attendee joined in UTC.").nullish(),
2889
+ leaveDateTime: z.string().regex(
2890
+ /^[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])$/
2891
+ ).datetime({ offset: true }).describe("The time the attendee left in UTC.").nullish()
2892
+ }).passthrough();
2893
+ const microsoft_graph_virtualEventExternalRegistrationInformation = z.object({
2894
+ referrer: z.string().describe(
2895
+ "A URL or string that represents the location from which the registrant registered. Optional."
2896
+ ).nullish(),
2897
+ registrationId: z.string().describe(
2898
+ "The identifier for a virtualEventExternalRegistrationInformation object. Optional. If set, the maximum supported length is 256 characters."
2899
+ ).nullish()
2900
+ }).passthrough();
2901
+ const microsoft_graph_attendanceRecord = z.object({
2902
+ id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
2903
+ attendanceIntervals: z.array(microsoft_graph_attendanceInterval).describe("List of time periods between joining and leaving a meeting.").optional(),
2904
+ emailAddress: z.string().describe("Email address of the user associated with this attendance record.").nullish(),
2905
+ externalRegistrationInformation: microsoft_graph_virtualEventExternalRegistrationInformation.optional(),
2906
+ identity: microsoft_graph_identity.optional(),
2907
+ registrationId: z.string().describe(
2908
+ "Unique identifier of a virtualEventRegistration that is available to all participants registered for the virtualEventWebinar."
2909
+ ).nullish(),
2910
+ role: z.string().describe(
2911
+ "Role of the attendee. The possible values are: None, Attendee, Presenter, and Organizer."
2912
+ ).nullish(),
2913
+ totalAttendanceInSeconds: z.number().gte(-2147483648).lte(2147483647).describe("Total duration of the attendances in seconds.").nullish()
2914
+ }).passthrough();
2915
+ const microsoft_graph_meetingAttendanceReport = z.object({
2916
+ id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
2917
+ externalEventInformation: z.array(microsoft_graph_virtualEventExternalInformation).describe(
2918
+ "The external information of a virtual event. Returned only for event organizers or coorganizers. Read-only."
2919
+ ).optional(),
2920
+ meetingEndDateTime: z.string().regex(
2921
+ /^[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])$/
2922
+ ).datetime({ offset: true }).describe("UTC time when the meeting ended. Read-only.").nullish(),
2923
+ meetingStartDateTime: z.string().regex(
2924
+ /^[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])$/
2925
+ ).datetime({ offset: true }).describe("UTC time when the meeting started. Read-only.").nullish(),
2926
+ totalParticipantCount: z.number().gte(-2147483648).lte(2147483647).describe("Total number of participants. Read-only.").nullish(),
2927
+ attendanceRecords: z.array(microsoft_graph_attendanceRecord).describe("List of attendance records of an attendance report. Read-only.").optional()
2928
+ }).passthrough();
2929
+ const microsoft_graph_meetingAttendanceReportCollectionResponse = z.object({
2930
+ "@odata.count": z.number().int().nullable(),
2931
+ "@odata.nextLink": z.string().nullable(),
2932
+ value: z.array(microsoft_graph_meetingAttendanceReport)
2933
+ }).partial().passthrough();
2934
+ const microsoft_graph_attendanceRecordCollectionResponse = z.object({
2935
+ "@odata.count": z.number().int().nullable(),
2936
+ "@odata.nextLink": z.string().nullable(),
2937
+ value: z.array(microsoft_graph_attendanceRecord)
2938
+ }).partial().passthrough();
2876
2939
  const microsoft_graph_callRecording = z.object({
2877
2940
  id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
2878
2941
  callId: z.string().describe("The unique identifier for the call that is related to this recording. Read-only.").nullish(),
@@ -3778,6 +3841,13 @@ const schemas = {
3778
3841
  microsoft_graph_joinMeetingIdSettings,
3779
3842
  microsoft_graph_onlineMeeting,
3780
3843
  microsoft_graph_onlineMeetingCollectionResponse,
3844
+ microsoft_graph_virtualEventExternalInformation,
3845
+ microsoft_graph_attendanceInterval,
3846
+ microsoft_graph_virtualEventExternalRegistrationInformation,
3847
+ microsoft_graph_attendanceRecord,
3848
+ microsoft_graph_meetingAttendanceReport,
3849
+ microsoft_graph_meetingAttendanceReportCollectionResponse,
3850
+ microsoft_graph_attendanceRecordCollectionResponse,
3781
3851
  microsoft_graph_callRecording,
3782
3852
  microsoft_graph_callRecordingCollectionResponse,
3783
3853
  microsoft_graph_callTranscript,
@@ -6377,6 +6447,126 @@ resource.`,
6377
6447
  ],
6378
6448
  response: z.void()
6379
6449
  },
6450
+ {
6451
+ method: "get",
6452
+ path: "/me/onlineMeetings/:onlineMeetingId/attendanceReports",
6453
+ alias: "list-meeting-attendance-reports",
6454
+ description: `Get a list of meetingAttendanceReport objects for an onlineMeeting or a virtualEvent. Each time an online meeting or a virtual event ends, an attendance report is generated for that session.`,
6455
+ requestFormat: "json",
6456
+ parameters: [
6457
+ {
6458
+ name: "$top",
6459
+ type: "Query",
6460
+ schema: z.number().int().gte(0).describe("Show only the first n items").optional()
6461
+ },
6462
+ {
6463
+ name: "$skip",
6464
+ type: "Query",
6465
+ schema: z.number().int().gte(0).describe("Skip the first n items").optional()
6466
+ },
6467
+ {
6468
+ name: "$search",
6469
+ type: "Query",
6470
+ schema: z.string().describe("Search items by search phrases").optional()
6471
+ },
6472
+ {
6473
+ name: "$filter",
6474
+ type: "Query",
6475
+ schema: z.string().describe("Filter items by property values").optional()
6476
+ },
6477
+ {
6478
+ name: "$count",
6479
+ type: "Query",
6480
+ schema: z.boolean().describe("Include count of items").optional()
6481
+ },
6482
+ {
6483
+ name: "$orderby",
6484
+ type: "Query",
6485
+ schema: z.array(z.string()).describe("Order items by property values").optional()
6486
+ },
6487
+ {
6488
+ name: "$select",
6489
+ type: "Query",
6490
+ schema: z.array(z.string()).describe("Select properties to be returned").optional()
6491
+ },
6492
+ {
6493
+ name: "$expand",
6494
+ type: "Query",
6495
+ schema: z.array(z.string()).describe("Expand related entities").optional()
6496
+ }
6497
+ ],
6498
+ response: z.void()
6499
+ },
6500
+ {
6501
+ method: "get",
6502
+ path: "/me/onlineMeetings/:onlineMeetingId/attendanceReports/:meetingAttendanceReportId",
6503
+ alias: "get-meeting-attendance-report",
6504
+ description: `Get the meetingAttendanceReport for an onlineMeeting or a virtualEvent. When an online meeting ends, an attendance report is generated for that session.`,
6505
+ requestFormat: "json",
6506
+ parameters: [
6507
+ {
6508
+ name: "$select",
6509
+ type: "Query",
6510
+ schema: z.array(z.string()).describe("Select properties to be returned").optional()
6511
+ },
6512
+ {
6513
+ name: "$expand",
6514
+ type: "Query",
6515
+ schema: z.array(z.string()).describe("Expand related entities").optional()
6516
+ }
6517
+ ],
6518
+ response: z.void()
6519
+ },
6520
+ {
6521
+ method: "get",
6522
+ path: "/me/onlineMeetings/:onlineMeetingId/attendanceReports/:meetingAttendanceReportId/attendanceRecords",
6523
+ alias: "list-meeting-attendance-records",
6524
+ description: `Get a list of attendanceRecord objects and their properties.`,
6525
+ requestFormat: "json",
6526
+ parameters: [
6527
+ {
6528
+ name: "$top",
6529
+ type: "Query",
6530
+ schema: z.number().int().gte(0).describe("Show only the first n items").optional()
6531
+ },
6532
+ {
6533
+ name: "$skip",
6534
+ type: "Query",
6535
+ schema: z.number().int().gte(0).describe("Skip the first n items").optional()
6536
+ },
6537
+ {
6538
+ name: "$search",
6539
+ type: "Query",
6540
+ schema: z.string().describe("Search items by search phrases").optional()
6541
+ },
6542
+ {
6543
+ name: "$filter",
6544
+ type: "Query",
6545
+ schema: z.string().describe("Filter items by property values").optional()
6546
+ },
6547
+ {
6548
+ name: "$count",
6549
+ type: "Query",
6550
+ schema: z.boolean().describe("Include count of items").optional()
6551
+ },
6552
+ {
6553
+ name: "$orderby",
6554
+ type: "Query",
6555
+ schema: z.array(z.string()).describe("Order items by property values").optional()
6556
+ },
6557
+ {
6558
+ name: "$select",
6559
+ type: "Query",
6560
+ schema: z.array(z.string()).describe("Select properties to be returned").optional()
6561
+ },
6562
+ {
6563
+ name: "$expand",
6564
+ type: "Query",
6565
+ schema: z.array(z.string()).describe("Expand related entities").optional()
6566
+ }
6567
+ ],
6568
+ response: z.void()
6569
+ },
6380
6570
  {
6381
6571
  method: "get",
6382
6572
  path: "/me/onlineMeetings/:onlineMeetingId/recordings",
@@ -1,10 +1,10 @@
1
- 2026-03-25 11:58:50 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me
2
- 2026-03-25 11:58:50 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me
3
- 2026-03-25 11:58:50 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me
4
- 2026-03-25 11:58:50 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me/messages
5
- 2026-03-25 11:58:50 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me/calendar
6
- 2026-03-25 11:58:51 INFO: Using environment variables for secrets
7
- 2026-03-25 11:58:51 INFO: Using environment variables for secrets
8
- 2026-03-25 11:58:51 INFO: Using environment variables for secrets
9
- 2026-03-25 11:58:51 INFO: Using environment variables for secrets
10
- 2026-03-25 11:58:51 INFO: Using environment variables for secrets
1
+ 2026-03-25 12:50:25 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me
2
+ 2026-03-25 12:50:25 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me
3
+ 2026-03-25 12:50:25 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me
4
+ 2026-03-25 12:50:25 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me/messages
5
+ 2026-03-25 12:50:25 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me/calendar
6
+ 2026-03-25 12:50:26 INFO: Using environment variables for secrets
7
+ 2026-03-25 12:50:26 INFO: Using environment variables for secrets
8
+ 2026-03-25 12:50:26 INFO: Using environment variables for secrets
9
+ 2026-03-25 12:50:26 INFO: Using environment variables for secrets
10
+ 2026-03-25 12:50:26 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.46.2",
3
+ "version": "0.47.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",
@@ -792,6 +792,27 @@
792
792
  "returnDownloadUrl": true,
793
793
  "llmTip": "Returns a temporary download URL for the meeting recording in MP4 format. Use the download URL to access the video file. The recording may be large — do not attempt to stream it inline."
794
794
  },
795
+ {
796
+ "pathPattern": "/me/onlineMeetings/{onlineMeeting-id}/attendanceReports",
797
+ "method": "get",
798
+ "toolName": "list-meeting-attendance-reports",
799
+ "workScopes": ["OnlineMeetingArtifact.Read.All"],
800
+ "llmTip": "Lists attendance reports for a meeting. Each report has meetingStartDateTime, meetingEndDateTime, totalParticipantCount. For recurring meetings, there is one report per occurrence. Get the meeting ID first via list-online-meetings."
801
+ },
802
+ {
803
+ "pathPattern": "/me/onlineMeetings/{onlineMeeting-id}/attendanceReports/{meetingAttendanceReport-id}",
804
+ "method": "get",
805
+ "toolName": "get-meeting-attendance-report",
806
+ "workScopes": ["OnlineMeetingArtifact.Read.All"],
807
+ "llmTip": "Gets a specific attendance report with totalParticipantCount, meetingStartDateTime, meetingEndDateTime."
808
+ },
809
+ {
810
+ "pathPattern": "/me/onlineMeetings/{onlineMeeting-id}/attendanceReports/{meetingAttendanceReport-id}/attendanceRecords",
811
+ "method": "get",
812
+ "toolName": "list-meeting-attendance-records",
813
+ "workScopes": ["OnlineMeetingArtifact.Read.All"],
814
+ "llmTip": "Lists individual attendance records for a meeting report. Each record has: identity (displayName), emailAddress, role (Organizer/Presenter/Attendee), totalAttendanceInSeconds, and attendanceIntervals with joinDateTime/leaveDateTime. Use to determine who attended, how long, and when they joined/left."
815
+ },
795
816
  {
796
817
  "pathPattern": "/groups/{group-id}/conversations",
797
818
  "method": "get",