@softeria/ms-365-mcp-server 0.44.0 → 0.45.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 +4 -1
- package/dist/endpoints.json +25 -0
- package/dist/generated/client.js +236 -1
- package/dist/graph-tools.js +6 -1
- package/logs/mcp-server.log +10 -10
- package/package.json +1 -1
- package/src/endpoints.json +25 -0
package/README.md
CHANGED
|
@@ -133,11 +133,14 @@ delete-outlook-contact</sub>
|
|
|
133
133
|
|
|
134
134
|
### Organization Account Tools (Requires --org-mode flag)
|
|
135
135
|
|
|
136
|
-
**Teams & Chats**
|
|
136
|
+
**Teams & Chats**
|
|
137
137
|
<sub>list-chats, get-chat, list-chat-messages, get-chat-message, send-chat-message, list-chat-message-replies,
|
|
138
138
|
reply-to-chat-message, list-joined-teams, get-team, list-team-channels, get-team-channel, list-channel-messages,
|
|
139
139
|
get-channel-message, send-channel-message, list-team-members</sub>
|
|
140
140
|
|
|
141
|
+
**Online Meetings & Transcripts**
|
|
142
|
+
<sub>list-online-meetings, list-meeting-transcripts, get-meeting-transcript-content</sub>
|
|
143
|
+
|
|
141
144
|
**SharePoint Sites**
|
|
142
145
|
<sub>search-sharepoint-sites, get-sharepoint-site, get-sharepoint-site-by-path, list-sharepoint-site-drives,
|
|
143
146
|
get-sharepoint-site-drive-by-id, list-sharepoint-site-items, get-sharepoint-site-item, list-sharepoint-site-lists,
|
package/dist/endpoints.json
CHANGED
|
@@ -689,6 +689,31 @@
|
|
|
689
689
|
"scopes": ["Mail.Read", "Calendars.Read", "Files.Read.All", "People.Read"],
|
|
690
690
|
"workScopes": ["Sites.Read.All", "Chat.Read", "ChannelMessage.Read.All"]
|
|
691
691
|
},
|
|
692
|
+
{
|
|
693
|
+
"pathPattern": "/me/onlineMeetings",
|
|
694
|
+
"method": "get",
|
|
695
|
+
"toolName": "list-online-meetings",
|
|
696
|
+
"scopes": ["OnlineMeetings.Read"],
|
|
697
|
+
"workScopes": ["OnlineMeetings.Read"],
|
|
698
|
+
"llmTip": "List online meetings. Use $filter=joinWebUrl eq '{url}' to find a specific meeting by its Teams join link. Returns meeting IDs needed for transcript access."
|
|
699
|
+
},
|
|
700
|
+
{
|
|
701
|
+
"pathPattern": "/me/onlineMeetings/{onlineMeeting-id}/transcripts",
|
|
702
|
+
"method": "get",
|
|
703
|
+
"toolName": "list-meeting-transcripts",
|
|
704
|
+
"scopes": ["OnlineMeetingTranscript.Read.All"],
|
|
705
|
+
"workScopes": ["OnlineMeetingTranscript.Read.All"],
|
|
706
|
+
"llmTip": "Lists available transcripts for a meeting. Get the meeting ID first via list-online-meetings."
|
|
707
|
+
},
|
|
708
|
+
{
|
|
709
|
+
"pathPattern": "/me/onlineMeetings/{onlineMeeting-id}/transcripts/{callTranscript-id}/content",
|
|
710
|
+
"method": "get",
|
|
711
|
+
"toolName": "get-meeting-transcript-content",
|
|
712
|
+
"scopes": ["OnlineMeetingTranscript.Read.All"],
|
|
713
|
+
"workScopes": ["OnlineMeetingTranscript.Read.All"],
|
|
714
|
+
"acceptType": "text/vtt",
|
|
715
|
+
"llmTip": "Returns the transcript content in WebVTT format with speaker identification and timestamps."
|
|
716
|
+
},
|
|
692
717
|
{
|
|
693
718
|
"pathPattern": "/groups/{group-id}/conversations",
|
|
694
719
|
"method": "get",
|
package/dist/generated/client.js
CHANGED
|
@@ -2360,7 +2360,7 @@ const microsoft_graph_team = z.lazy(
|
|
|
2360
2360
|
).nullish(),
|
|
2361
2361
|
allChannels: z.array(microsoft_graph_channel).describe("List of channels either hosted in or shared with the team (incoming channels).").optional(),
|
|
2362
2362
|
channels: z.array(microsoft_graph_channel).describe("The collection of channels and messages associated with the team.").optional(),
|
|
2363
|
-
group: microsoft_graph_group.describe("[Note: Simplified from
|
|
2363
|
+
group: microsoft_graph_group.describe("[Note: Simplified from 74 properties to 25 most common ones]").optional(),
|
|
2364
2364
|
incomingChannels: z.array(microsoft_graph_channel).describe("List of channels shared with the team.").optional(),
|
|
2365
2365
|
installedApps: z.array(microsoft_graph_teamsAppInstallation).describe("The apps installed in this team.").optional(),
|
|
2366
2366
|
members: z.array(microsoft_graph_conversationMember).describe("Members and owners of the team.").optional(),
|
|
@@ -2787,6 +2787,121 @@ const microsoft_graph_onenotePageCollectionResponse = z.object({
|
|
|
2787
2787
|
"@odata.nextLink": z.string().nullable(),
|
|
2788
2788
|
value: z.array(microsoft_graph_onenotePage)
|
|
2789
2789
|
}).partial().passthrough();
|
|
2790
|
+
const microsoft_graph_allowedLobbyAdmitterRoles = z.enum([
|
|
2791
|
+
"organizerAndCoOrganizersAndPresenters",
|
|
2792
|
+
"organizerAndCoOrganizers",
|
|
2793
|
+
"unknownFutureValue"
|
|
2794
|
+
]);
|
|
2795
|
+
const microsoft_graph_onlineMeetingPresenters = z.enum([
|
|
2796
|
+
"everyone",
|
|
2797
|
+
"organization",
|
|
2798
|
+
"roleIsPresenter",
|
|
2799
|
+
"organizer",
|
|
2800
|
+
"unknownFutureValue"
|
|
2801
|
+
]);
|
|
2802
|
+
const microsoft_graph_meetingLiveShareOptions = z.enum([
|
|
2803
|
+
"enabled",
|
|
2804
|
+
"disabled",
|
|
2805
|
+
"unknownFutureValue"
|
|
2806
|
+
]);
|
|
2807
|
+
const microsoft_graph_meetingChatMode = z.enum([
|
|
2808
|
+
"enabled",
|
|
2809
|
+
"disabled",
|
|
2810
|
+
"limited",
|
|
2811
|
+
"unknownFutureValue"
|
|
2812
|
+
]);
|
|
2813
|
+
const microsoft_graph_audioConferencing = z.object({
|
|
2814
|
+
conferenceId: z.string().describe("The conference id of the online meeting.").nullish(),
|
|
2815
|
+
dialinUrl: z.string().describe("A URL to the externally-accessible web page that contains dial-in information.").nullish(),
|
|
2816
|
+
tollFreeNumber: z.string().describe("The toll-free number that connects to the Audio Conference Provider.").nullish(),
|
|
2817
|
+
tollFreeNumbers: z.array(z.string().nullable()).describe("List of toll-free numbers that are displayed in the meeting invite.").optional(),
|
|
2818
|
+
tollNumber: z.string().describe("The toll number that connects to the Audio Conference Provider.").nullish(),
|
|
2819
|
+
tollNumbers: z.array(z.string().nullable()).describe("List of toll numbers that are displayed in the meeting invite.").optional()
|
|
2820
|
+
}).passthrough();
|
|
2821
|
+
const microsoft_graph_chatInfo = z.object({
|
|
2822
|
+
messageId: z.string().describe("The unique identifier of a message in a Microsoft Teams channel.").nullish(),
|
|
2823
|
+
replyChainMessageId: z.string().describe("The ID of the reply message.").nullish(),
|
|
2824
|
+
threadId: z.string().describe("The unique identifier for a thread in Microsoft Teams.").nullish()
|
|
2825
|
+
}).passthrough();
|
|
2826
|
+
const microsoft_graph_chatRestrictions = z.object({
|
|
2827
|
+
allowTextOnly: z.boolean().describe("Indicates whether only text is allowed in the meeting chat. Optional.").nullish()
|
|
2828
|
+
}).passthrough();
|
|
2829
|
+
const microsoft_graph_joinMeetingIdSettings = z.object({
|
|
2830
|
+
isPasscodeRequired: z.boolean().describe(
|
|
2831
|
+
"Indicates whether a passcode is required to join a meeting when using joinMeetingId. Optional."
|
|
2832
|
+
).nullish(),
|
|
2833
|
+
joinMeetingId: z.string().describe("The meeting ID to be used to join a meeting. Optional. Read-only.").nullish(),
|
|
2834
|
+
passcode: z.string().describe("The passcode to join a meeting. Optional. Read-only.").nullish()
|
|
2835
|
+
}).passthrough();
|
|
2836
|
+
const microsoft_graph_onlineMeeting = z.object({
|
|
2837
|
+
id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
|
|
2838
|
+
subject: z.string().describe("The subject of the online meeting.").nullish(),
|
|
2839
|
+
allowAttendeeToEnableCamera: z.boolean().describe("Indicates whether attendees can turn on their camera.").nullish(),
|
|
2840
|
+
allowAttendeeToEnableMic: z.boolean().describe("Indicates whether attendees can turn on their microphone.").nullish(),
|
|
2841
|
+
allowBreakoutRooms: z.boolean().describe("Indicates whether breakout rooms are enabled for the meeting.").nullish(),
|
|
2842
|
+
allowCopyingAndSharingMeetingContent: z.boolean().describe(
|
|
2843
|
+
"Indicates whether the ability to copy and share meeting content is enabled for the meeting."
|
|
2844
|
+
).nullish(),
|
|
2845
|
+
allowedLobbyAdmitters: microsoft_graph_allowedLobbyAdmitterRoles.optional(),
|
|
2846
|
+
allowedPresenters: microsoft_graph_onlineMeetingPresenters.optional(),
|
|
2847
|
+
allowLiveShare: microsoft_graph_meetingLiveShareOptions.optional(),
|
|
2848
|
+
allowMeetingChat: microsoft_graph_meetingChatMode.optional(),
|
|
2849
|
+
allowParticipantsToChangeName: z.boolean().describe(
|
|
2850
|
+
"Specifies if participants are allowed to rename themselves in an instance of the meeting."
|
|
2851
|
+
).nullish(),
|
|
2852
|
+
allowPowerPointSharing: z.boolean().describe("Indicates whether PowerPoint live is enabled for the meeting.").nullish(),
|
|
2853
|
+
allowRecording: z.boolean().describe("Indicates whether recording is enabled for the meeting.").nullish(),
|
|
2854
|
+
allowTeamworkReactions: z.boolean().describe("Indicates if Teams reactions are enabled for the meeting.").nullish(),
|
|
2855
|
+
allowTranscription: z.boolean().describe("Indicates whether transcription is enabled for the meeting.").nullish(),
|
|
2856
|
+
allowWhiteboard: z.boolean().describe("Indicates whether whiteboard is enabled for the meeting.").nullish(),
|
|
2857
|
+
audioConferencing: microsoft_graph_audioConferencing.optional(),
|
|
2858
|
+
chatInfo: microsoft_graph_chatInfo.optional(),
|
|
2859
|
+
chatRestrictions: microsoft_graph_chatRestrictions.optional(),
|
|
2860
|
+
expiryDateTime: z.string().regex(
|
|
2861
|
+
/^[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])$/
|
|
2862
|
+
).datetime({ offset: true }).describe(
|
|
2863
|
+
"Indicates the date and time when the meeting resource expires. The timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z."
|
|
2864
|
+
).nullish(),
|
|
2865
|
+
isEndToEndEncryptionEnabled: z.boolean().describe("Indicates whether end-to-end encryption (E2EE) is enabled for the online meeting.").nullish(),
|
|
2866
|
+
isEntryExitAnnounced: z.boolean().describe("Indicates whether to announce when callers join or leave.").nullish(),
|
|
2867
|
+
joinInformation: microsoft_graph_itemBody.optional(),
|
|
2868
|
+
joinMeetingIdSettings: microsoft_graph_joinMeetingIdSettings.optional(),
|
|
2869
|
+
joinWebUrl: z.string().describe("The join URL of the online meeting. Read-only.").nullish()
|
|
2870
|
+
}).passthrough().passthrough();
|
|
2871
|
+
const microsoft_graph_onlineMeetingCollectionResponse = z.object({
|
|
2872
|
+
"@odata.count": z.number().int().nullable(),
|
|
2873
|
+
"@odata.nextLink": z.string().nullable(),
|
|
2874
|
+
value: z.array(microsoft_graph_onlineMeeting)
|
|
2875
|
+
}).partial().passthrough();
|
|
2876
|
+
const microsoft_graph_callTranscript = z.object({
|
|
2877
|
+
id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
|
|
2878
|
+
callId: z.string().describe("The unique identifier for the call that is related to this transcript. Read-only.").nullish(),
|
|
2879
|
+
content: z.string().describe("The content of the transcript. Read-only.").nullish(),
|
|
2880
|
+
contentCorrelationId: z.string().describe(
|
|
2881
|
+
"The unique identifier that links the transcript with its corresponding recording. Read-only."
|
|
2882
|
+
).nullish(),
|
|
2883
|
+
createdDateTime: z.string().regex(
|
|
2884
|
+
/^[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])$/
|
|
2885
|
+
).datetime({ offset: true }).describe(
|
|
2886
|
+
"Date and time at which the transcript was created. The timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
|
|
2887
|
+
).nullish(),
|
|
2888
|
+
endDateTime: z.string().regex(
|
|
2889
|
+
/^[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])$/
|
|
2890
|
+
).datetime({ offset: true }).describe(
|
|
2891
|
+
"Date and time at which the transcription ends. The timestamp type represents date and time information using ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Read-only."
|
|
2892
|
+
).nullish(),
|
|
2893
|
+
meetingId: z.string().describe(
|
|
2894
|
+
"The unique identifier of the online meeting related to this transcript. Read-only."
|
|
2895
|
+
).nullish(),
|
|
2896
|
+
meetingOrganizer: microsoft_graph_identitySet.optional(),
|
|
2897
|
+
metadataContent: z.string().describe("The time-aligned metadata of the utterances in the transcript. Read-only.").nullish(),
|
|
2898
|
+
transcriptContentUrl: z.string().describe("The URL that can be used to access the content of the transcript. Read-only.").nullish()
|
|
2899
|
+
}).passthrough();
|
|
2900
|
+
const microsoft_graph_callTranscriptCollectionResponse = z.object({
|
|
2901
|
+
"@odata.count": z.number().int().nullable(),
|
|
2902
|
+
"@odata.nextLink": z.string().nullable(),
|
|
2903
|
+
value: z.array(microsoft_graph_callTranscript)
|
|
2904
|
+
}).partial().passthrough();
|
|
2790
2905
|
const microsoft_graph_plannerChecklistItems = z.object({}).passthrough();
|
|
2791
2906
|
const microsoft_graph_plannerPreviewType = z.enum([
|
|
2792
2907
|
"automatic",
|
|
@@ -3627,6 +3742,18 @@ const schemas = {
|
|
|
3627
3742
|
microsoft_graph_notebookCollectionResponse,
|
|
3628
3743
|
microsoft_graph_onenoteSectionCollectionResponse,
|
|
3629
3744
|
microsoft_graph_onenotePageCollectionResponse,
|
|
3745
|
+
microsoft_graph_allowedLobbyAdmitterRoles,
|
|
3746
|
+
microsoft_graph_onlineMeetingPresenters,
|
|
3747
|
+
microsoft_graph_meetingLiveShareOptions,
|
|
3748
|
+
microsoft_graph_meetingChatMode,
|
|
3749
|
+
microsoft_graph_audioConferencing,
|
|
3750
|
+
microsoft_graph_chatInfo,
|
|
3751
|
+
microsoft_graph_chatRestrictions,
|
|
3752
|
+
microsoft_graph_joinMeetingIdSettings,
|
|
3753
|
+
microsoft_graph_onlineMeeting,
|
|
3754
|
+
microsoft_graph_onlineMeetingCollectionResponse,
|
|
3755
|
+
microsoft_graph_callTranscript,
|
|
3756
|
+
microsoft_graph_callTranscriptCollectionResponse,
|
|
3630
3757
|
microsoft_graph_plannerChecklistItems,
|
|
3631
3758
|
microsoft_graph_plannerPreviewType,
|
|
3632
3759
|
microsoft_graph_plannerExternalReferences,
|
|
@@ -6114,6 +6241,114 @@ resource.`,
|
|
|
6114
6241
|
],
|
|
6115
6242
|
response: z.void()
|
|
6116
6243
|
},
|
|
6244
|
+
{
|
|
6245
|
+
method: "get",
|
|
6246
|
+
path: "/me/onlineMeetings",
|
|
6247
|
+
alias: "list-online-meetings",
|
|
6248
|
+
description: `Retrieve the properties and relationships of an onlineMeeting object. For example, you can: Teams live event attendee report (deprecated) and Teams live event recordings (deprecated) are online meeting artifacts. For more information, see Online meeting artifacts and permissions.`,
|
|
6249
|
+
requestFormat: "json",
|
|
6250
|
+
parameters: [
|
|
6251
|
+
{
|
|
6252
|
+
name: "$top",
|
|
6253
|
+
type: "Query",
|
|
6254
|
+
schema: z.number().int().gte(0).describe("Show only the first n items").optional()
|
|
6255
|
+
},
|
|
6256
|
+
{
|
|
6257
|
+
name: "$skip",
|
|
6258
|
+
type: "Query",
|
|
6259
|
+
schema: z.number().int().gte(0).describe("Skip the first n items").optional()
|
|
6260
|
+
},
|
|
6261
|
+
{
|
|
6262
|
+
name: "$search",
|
|
6263
|
+
type: "Query",
|
|
6264
|
+
schema: z.string().describe("Search items by search phrases").optional()
|
|
6265
|
+
},
|
|
6266
|
+
{
|
|
6267
|
+
name: "$filter",
|
|
6268
|
+
type: "Query",
|
|
6269
|
+
schema: z.string().describe("Filter items by property values").optional()
|
|
6270
|
+
},
|
|
6271
|
+
{
|
|
6272
|
+
name: "$count",
|
|
6273
|
+
type: "Query",
|
|
6274
|
+
schema: z.boolean().describe("Include count of items").optional()
|
|
6275
|
+
},
|
|
6276
|
+
{
|
|
6277
|
+
name: "$orderby",
|
|
6278
|
+
type: "Query",
|
|
6279
|
+
schema: z.array(z.string()).describe("Order items by property values").optional()
|
|
6280
|
+
},
|
|
6281
|
+
{
|
|
6282
|
+
name: "$select",
|
|
6283
|
+
type: "Query",
|
|
6284
|
+
schema: z.array(z.string()).describe("Select properties to be returned").optional()
|
|
6285
|
+
},
|
|
6286
|
+
{
|
|
6287
|
+
name: "$expand",
|
|
6288
|
+
type: "Query",
|
|
6289
|
+
schema: z.array(z.string()).describe("Expand related entities").optional()
|
|
6290
|
+
}
|
|
6291
|
+
],
|
|
6292
|
+
response: z.void()
|
|
6293
|
+
},
|
|
6294
|
+
{
|
|
6295
|
+
method: "get",
|
|
6296
|
+
path: "/me/onlineMeetings/:onlineMeetingId/transcripts",
|
|
6297
|
+
alias: "list-meeting-transcripts",
|
|
6298
|
+
description: `The transcripts of an online meeting. Read-only.`,
|
|
6299
|
+
requestFormat: "json",
|
|
6300
|
+
parameters: [
|
|
6301
|
+
{
|
|
6302
|
+
name: "$top",
|
|
6303
|
+
type: "Query",
|
|
6304
|
+
schema: z.number().int().gte(0).describe("Show only the first n items").optional()
|
|
6305
|
+
},
|
|
6306
|
+
{
|
|
6307
|
+
name: "$skip",
|
|
6308
|
+
type: "Query",
|
|
6309
|
+
schema: z.number().int().gte(0).describe("Skip the first n items").optional()
|
|
6310
|
+
},
|
|
6311
|
+
{
|
|
6312
|
+
name: "$search",
|
|
6313
|
+
type: "Query",
|
|
6314
|
+
schema: z.string().describe("Search items by search phrases").optional()
|
|
6315
|
+
},
|
|
6316
|
+
{
|
|
6317
|
+
name: "$filter",
|
|
6318
|
+
type: "Query",
|
|
6319
|
+
schema: z.string().describe("Filter items by property values").optional()
|
|
6320
|
+
},
|
|
6321
|
+
{
|
|
6322
|
+
name: "$count",
|
|
6323
|
+
type: "Query",
|
|
6324
|
+
schema: z.boolean().describe("Include count of items").optional()
|
|
6325
|
+
},
|
|
6326
|
+
{
|
|
6327
|
+
name: "$orderby",
|
|
6328
|
+
type: "Query",
|
|
6329
|
+
schema: z.array(z.string()).describe("Order items by property values").optional()
|
|
6330
|
+
},
|
|
6331
|
+
{
|
|
6332
|
+
name: "$select",
|
|
6333
|
+
type: "Query",
|
|
6334
|
+
schema: z.array(z.string()).describe("Select properties to be returned").optional()
|
|
6335
|
+
},
|
|
6336
|
+
{
|
|
6337
|
+
name: "$expand",
|
|
6338
|
+
type: "Query",
|
|
6339
|
+
schema: z.array(z.string()).describe("Expand related entities").optional()
|
|
6340
|
+
}
|
|
6341
|
+
],
|
|
6342
|
+
response: z.void()
|
|
6343
|
+
},
|
|
6344
|
+
{
|
|
6345
|
+
method: "get",
|
|
6346
|
+
path: "/me/onlineMeetings/:onlineMeetingId/transcripts/:callTranscriptId/content",
|
|
6347
|
+
alias: "get-meeting-transcript-content",
|
|
6348
|
+
description: `The content of the transcript. Read-only.`,
|
|
6349
|
+
requestFormat: "json",
|
|
6350
|
+
response: z.void()
|
|
6351
|
+
},
|
|
6117
6352
|
{
|
|
6118
6353
|
method: "get",
|
|
6119
6354
|
path: "/me/planner/tasks",
|
package/dist/graph-tools.js
CHANGED
|
@@ -5,6 +5,7 @@ import { readFileSync } from "fs";
|
|
|
5
5
|
import path from "path";
|
|
6
6
|
import { fileURLToPath } from "url";
|
|
7
7
|
import { TOOL_CATEGORIES } from "./tool-categories.js";
|
|
8
|
+
import { getRequestTokens } from "./request-context.js";
|
|
8
9
|
const __filename = fileURLToPath(import.meta.url);
|
|
9
10
|
const __dirname = path.dirname(__filename);
|
|
10
11
|
const endpointsData = JSON.parse(
|
|
@@ -14,7 +15,7 @@ async function executeGraphTool(tool, config, graphClient, params, authManager)
|
|
|
14
15
|
logger.info(`Tool ${tool.alias} called with params: ${JSON.stringify(params)}`);
|
|
15
16
|
try {
|
|
16
17
|
let accountAccessToken;
|
|
17
|
-
if (authManager && !authManager.isOAuthModeEnabled()) {
|
|
18
|
+
if (authManager && !authManager.isOAuthModeEnabled() && !getRequestTokens()) {
|
|
18
19
|
const accountParam = params.account;
|
|
19
20
|
try {
|
|
20
21
|
accountAccessToken = await authManager.getTokenForAccount(accountParam);
|
|
@@ -131,6 +132,10 @@ async function executeGraphTool(tool, config, graphClient, params, authManager)
|
|
|
131
132
|
headers["Content-Type"] = config.contentType;
|
|
132
133
|
logger.info(`Setting custom Content-Type: ${config.contentType}`);
|
|
133
134
|
}
|
|
135
|
+
if (config?.acceptType) {
|
|
136
|
+
headers["Accept"] = config.acceptType;
|
|
137
|
+
logger.info(`Setting custom Accept: ${config.acceptType}`);
|
|
138
|
+
}
|
|
134
139
|
if (Object.keys(queryParams).length > 0) {
|
|
135
140
|
const queryString = Object.entries(queryParams).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join("&");
|
|
136
141
|
path2 = `${path2}${path2.includes("?") ? "&" : "?"}${queryString}`;
|
package/logs/mcp-server.log
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
2026-03-
|
|
2
|
-
2026-03-
|
|
3
|
-
2026-03-
|
|
4
|
-
2026-03-
|
|
5
|
-
2026-03-
|
|
6
|
-
2026-03-
|
|
7
|
-
2026-03-
|
|
8
|
-
2026-03-
|
|
9
|
-
2026-03-
|
|
10
|
-
2026-03-
|
|
1
|
+
2026-03-09 08:13:53 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me
|
|
2
|
+
2026-03-09 08:13:53 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me
|
|
3
|
+
2026-03-09 08:13:53 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me
|
|
4
|
+
2026-03-09 08:13:53 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me/messages
|
|
5
|
+
2026-03-09 08:13:53 INFO: [GRAPH CLIENT] Final URL being sent to Microsoft: https://graph.microsoft.com/v1.0/me/calendar
|
|
6
|
+
2026-03-09 08:13:54 INFO: Using environment variables for secrets
|
|
7
|
+
2026-03-09 08:13:54 INFO: Using environment variables for secrets
|
|
8
|
+
2026-03-09 08:13:54 INFO: Using environment variables for secrets
|
|
9
|
+
2026-03-09 08:13:54 INFO: Using environment variables for secrets
|
|
10
|
+
2026-03-09 08:13:54 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.45.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
|
@@ -689,6 +689,31 @@
|
|
|
689
689
|
"scopes": ["Mail.Read", "Calendars.Read", "Files.Read.All", "People.Read"],
|
|
690
690
|
"workScopes": ["Sites.Read.All", "Chat.Read", "ChannelMessage.Read.All"]
|
|
691
691
|
},
|
|
692
|
+
{
|
|
693
|
+
"pathPattern": "/me/onlineMeetings",
|
|
694
|
+
"method": "get",
|
|
695
|
+
"toolName": "list-online-meetings",
|
|
696
|
+
"scopes": ["OnlineMeetings.Read"],
|
|
697
|
+
"workScopes": ["OnlineMeetings.Read"],
|
|
698
|
+
"llmTip": "List online meetings. Use $filter=joinWebUrl eq '{url}' to find a specific meeting by its Teams join link. Returns meeting IDs needed for transcript access."
|
|
699
|
+
},
|
|
700
|
+
{
|
|
701
|
+
"pathPattern": "/me/onlineMeetings/{onlineMeeting-id}/transcripts",
|
|
702
|
+
"method": "get",
|
|
703
|
+
"toolName": "list-meeting-transcripts",
|
|
704
|
+
"scopes": ["OnlineMeetingTranscript.Read.All"],
|
|
705
|
+
"workScopes": ["OnlineMeetingTranscript.Read.All"],
|
|
706
|
+
"llmTip": "Lists available transcripts for a meeting. Get the meeting ID first via list-online-meetings."
|
|
707
|
+
},
|
|
708
|
+
{
|
|
709
|
+
"pathPattern": "/me/onlineMeetings/{onlineMeeting-id}/transcripts/{callTranscript-id}/content",
|
|
710
|
+
"method": "get",
|
|
711
|
+
"toolName": "get-meeting-transcript-content",
|
|
712
|
+
"scopes": ["OnlineMeetingTranscript.Read.All"],
|
|
713
|
+
"workScopes": ["OnlineMeetingTranscript.Read.All"],
|
|
714
|
+
"acceptType": "text/vtt",
|
|
715
|
+
"llmTip": "Returns the transcript content in WebVTT format with speaker identification and timestamps."
|
|
716
|
+
},
|
|
692
717
|
{
|
|
693
718
|
"pathPattern": "/groups/{group-id}/conversations",
|
|
694
719
|
"method": "get",
|