@softeria/ms-365-mcp-server 0.148.2 → 0.149.1
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/bin/modules/generate-mcp-tools.mjs +12 -1
- package/dist/endpoints.json +20 -2
- package/dist/generated/client.js +33 -0
- package/package.json +1 -1
- package/src/endpoints.json +20 -2
|
@@ -2,6 +2,17 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { execSync } from 'child_process';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Converts single-quoted `path:` strings that contain function-style OData segments with
|
|
7
|
+
* quoted parameters (e.g. `range(address=':address')`) into template literals, so the
|
|
8
|
+
* nested single quotes no longer break the generated TypeScript. A function may take
|
|
9
|
+
* several parameters, quoted or not, in any order:
|
|
10
|
+
* `getAllTranscripts(userId=':userId',startDateTime=:startDateTime)`.
|
|
11
|
+
*/
|
|
12
|
+
export function fixFunctionStylePaths(clientCode) {
|
|
13
|
+
return clientCode.replace(/(path:\s*)'(\/[^']*\([^)]*=':[\w]+'[^)]*\)[^']*)'/g, '$1`$2`');
|
|
14
|
+
}
|
|
15
|
+
|
|
5
16
|
export function generateMcpTools(openapiTrimmedFile, clientFilePath) {
|
|
6
17
|
try {
|
|
7
18
|
console.log(
|
|
@@ -47,7 +58,7 @@ export function generateMcpTools(openapiTrimmedFile, clientFilePath) {
|
|
|
47
58
|
// to backticks (template literal) so single quotes can remain inside.
|
|
48
59
|
// Match: path: '/...range(param=':value')...',
|
|
49
60
|
// Replace with: path: `/...range(param=':value')...`,
|
|
50
|
-
clientCode = clientCode
|
|
61
|
+
clientCode = fixFunctionStylePaths(clientCode);
|
|
51
62
|
|
|
52
63
|
// openapi-zod-client emits z.instanceof(File) for `format: binary` bodies; MCP
|
|
53
64
|
// transports JSON so no caller produces File. Body marshaller decodes the string.
|
package/dist/endpoints.json
CHANGED
|
@@ -510,7 +510,7 @@
|
|
|
510
510
|
"scopes": ["Calendars.Read"],
|
|
511
511
|
"supportsTimezone": true,
|
|
512
512
|
"supportsExpandExtendedProperties": true,
|
|
513
|
-
"llmTip": "Returns expanded recurring event instances (not just seriesMaster) within a date range for the default calendar. Requires startDateTime and endDateTime query parameters in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Use get-specific-calendar-view if you need a non-default calendar. To find Teams meetings, use $
|
|
513
|
+
"llmTip": "Returns expanded recurring event instances (not just seriesMaster) within a date range for the default calendar. Requires startDateTime and endDateTime query parameters in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Use get-specific-calendar-view if you need a non-default calendar. To find Teams meetings, use $select=subject,start,isOnlineMeeting,onlineMeetingProvider,onlineMeeting and keep the events with isOnlineMeeting true and onlineMeetingProvider teamsForBusiness; neither property is filterable (isOnlineMeeting returns 400 ErrorInvalidProperty). To search by subject, use $filter=contains(subject,'keyword'). Teams meetings expose their join link as onlineMeeting/joinUrl; the event resource has no joinWebUrl property. Pass that joinUrl to list-online-meetings as $filter=JoinWebUrl eq '{url}' to reach transcripts."
|
|
514
514
|
},
|
|
515
515
|
{
|
|
516
516
|
"pathPattern": "/me/calendars/{calendar-id}/calendarView",
|
|
@@ -521,7 +521,7 @@
|
|
|
521
521
|
"scopes": ["Calendars.Read"],
|
|
522
522
|
"supportsTimezone": true,
|
|
523
523
|
"supportsExpandExtendedProperties": true,
|
|
524
|
-
"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 $
|
|
524
|
+
"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 $select=subject,start,isOnlineMeeting,onlineMeetingProvider,onlineMeeting and keep the events with isOnlineMeeting true and onlineMeetingProvider teamsForBusiness; neither property is filterable (isOnlineMeeting returns 400 ErrorInvalidProperty). Teams meetings expose their join link as onlineMeeting/joinUrl; the event resource has no joinWebUrl property. Pass that joinUrl to list-online-meetings as $filter=JoinWebUrl eq '{url}' to reach transcripts."
|
|
525
525
|
},
|
|
526
526
|
{
|
|
527
527
|
"pathPattern": "/me/calendar/getSchedule",
|
|
@@ -2140,6 +2140,24 @@
|
|
|
2140
2140
|
"acceptType": "text/vtt",
|
|
2141
2141
|
"llmTip": "Returns the transcript content in WebVTT format with speaker identification and timestamps."
|
|
2142
2142
|
},
|
|
2143
|
+
{
|
|
2144
|
+
"pathPattern": "/me/adhocCalls/getAllTranscripts(userId='{userId}',startDateTime={startDateTime},endDateTime={endDateTime})",
|
|
2145
|
+
"method": "get",
|
|
2146
|
+
"toolName": "list-adhoc-call-transcripts",
|
|
2147
|
+
"presets": ["teams", "work"],
|
|
2148
|
+
"workScopes": ["CallTranscripts.Read.All"],
|
|
2149
|
+
"skipEncoding": ["startDateTime", "endDateTime"],
|
|
2150
|
+
"llmTip": "Lists transcripts of ad hoc calls (PSTN, 1:1 and group calls) started by the signed-in user. Use this for calls that have no calendar event and no online meeting, e.g. recordings named 'Anruf mit ...'. userId must be the signed-in user's object id (from get-current-user), not an email. startDateTime and endDateTime are required ISO 8601 UTC timestamps such as 2026-08-01T00:00:00Z. Each item carries callId and id (the transcript id) for get-adhoc-call-transcript-content; contentCorrelationId ends with the yyyyMMdd_HHmmss stamp that also appears in the recording file name in OneDrive. Do not use $filter, $orderby or $top."
|
|
2151
|
+
},
|
|
2152
|
+
{
|
|
2153
|
+
"pathPattern": "/me/adhocCalls/{adhocCall-id}/transcripts/{callTranscript-id}/content",
|
|
2154
|
+
"method": "get",
|
|
2155
|
+
"toolName": "get-adhoc-call-transcript-content",
|
|
2156
|
+
"presets": ["teams", "work"],
|
|
2157
|
+
"workScopes": ["CallTranscripts.Read.All"],
|
|
2158
|
+
"acceptType": "text/vtt",
|
|
2159
|
+
"llmTip": "Returns the transcript of an ad hoc call as WebVTT with speaker tags and timestamps. Take adhocCallId (the callId) and callTranscriptId (the id) from list-adhoc-call-transcripts; copy both exactly. On 403 SpeakerAttributionNotAllowed retry with Accept set to application/vnd.microsoft.graph.transcript+text."
|
|
2160
|
+
},
|
|
2143
2161
|
{
|
|
2144
2162
|
"pathPattern": "/me/onlineMeetings/{onlineMeeting-id}/recordings",
|
|
2145
2163
|
"method": "get",
|
package/dist/generated/client.js
CHANGED
|
@@ -7696,6 +7696,39 @@ from the default calendar of a group.`,
|
|
|
7696
7696
|
],
|
|
7697
7697
|
response: z.void()
|
|
7698
7698
|
},
|
|
7699
|
+
{
|
|
7700
|
+
method: "get",
|
|
7701
|
+
path: "/me/adhocCalls/:adhocCallId/transcripts/:callTranscriptId/content",
|
|
7702
|
+
alias: "get-adhoc-call-transcript-content",
|
|
7703
|
+
description: `The content of the transcript. Read-only.`,
|
|
7704
|
+
requestFormat: "json",
|
|
7705
|
+
response: z.void()
|
|
7706
|
+
},
|
|
7707
|
+
{
|
|
7708
|
+
method: "get",
|
|
7709
|
+
path: `/me/adhocCalls/getAllTranscripts(userId=':userId',startDateTime=:startDateTime,endDateTime=:endDateTime)`,
|
|
7710
|
+
alias: "list-adhoc-call-transcripts",
|
|
7711
|
+
description: `List adhoc call transcripts.`,
|
|
7712
|
+
requestFormat: "json",
|
|
7713
|
+
parameters: [
|
|
7714
|
+
{
|
|
7715
|
+
name: "userId",
|
|
7716
|
+
type: "Path",
|
|
7717
|
+
schema: z.string().describe("Path parameter: userId")
|
|
7718
|
+
},
|
|
7719
|
+
{
|
|
7720
|
+
name: "startDateTime",
|
|
7721
|
+
type: "Path",
|
|
7722
|
+
schema: z.string().describe("Path parameter: startDateTime")
|
|
7723
|
+
},
|
|
7724
|
+
{
|
|
7725
|
+
name: "endDateTime",
|
|
7726
|
+
type: "Path",
|
|
7727
|
+
schema: z.string().describe("Path parameter: endDateTime")
|
|
7728
|
+
}
|
|
7729
|
+
],
|
|
7730
|
+
response: z.void()
|
|
7731
|
+
},
|
|
7699
7732
|
{
|
|
7700
7733
|
method: "get",
|
|
7701
7734
|
path: "/me/calendar/calendarPermissions",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softeria/ms-365-mcp-server",
|
|
3
3
|
"mcpName": "io.github.Softeria/ms-365-mcp-server",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.149.1",
|
|
5
5
|
"description": " A Model Context Protocol (MCP) server for interacting with Microsoft 365 and Office services through the Graph API",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
package/src/endpoints.json
CHANGED
|
@@ -510,7 +510,7 @@
|
|
|
510
510
|
"scopes": ["Calendars.Read"],
|
|
511
511
|
"supportsTimezone": true,
|
|
512
512
|
"supportsExpandExtendedProperties": true,
|
|
513
|
-
"llmTip": "Returns expanded recurring event instances (not just seriesMaster) within a date range for the default calendar. Requires startDateTime and endDateTime query parameters in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Use get-specific-calendar-view if you need a non-default calendar. To find Teams meetings, use $
|
|
513
|
+
"llmTip": "Returns expanded recurring event instances (not just seriesMaster) within a date range for the default calendar. Requires startDateTime and endDateTime query parameters in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Use get-specific-calendar-view if you need a non-default calendar. To find Teams meetings, use $select=subject,start,isOnlineMeeting,onlineMeetingProvider,onlineMeeting and keep the events with isOnlineMeeting true and onlineMeetingProvider teamsForBusiness; neither property is filterable (isOnlineMeeting returns 400 ErrorInvalidProperty). To search by subject, use $filter=contains(subject,'keyword'). Teams meetings expose their join link as onlineMeeting/joinUrl; the event resource has no joinWebUrl property. Pass that joinUrl to list-online-meetings as $filter=JoinWebUrl eq '{url}' to reach transcripts."
|
|
514
514
|
},
|
|
515
515
|
{
|
|
516
516
|
"pathPattern": "/me/calendars/{calendar-id}/calendarView",
|
|
@@ -521,7 +521,7 @@
|
|
|
521
521
|
"scopes": ["Calendars.Read"],
|
|
522
522
|
"supportsTimezone": true,
|
|
523
523
|
"supportsExpandExtendedProperties": true,
|
|
524
|
-
"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 $
|
|
524
|
+
"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 $select=subject,start,isOnlineMeeting,onlineMeetingProvider,onlineMeeting and keep the events with isOnlineMeeting true and onlineMeetingProvider teamsForBusiness; neither property is filterable (isOnlineMeeting returns 400 ErrorInvalidProperty). Teams meetings expose their join link as onlineMeeting/joinUrl; the event resource has no joinWebUrl property. Pass that joinUrl to list-online-meetings as $filter=JoinWebUrl eq '{url}' to reach transcripts."
|
|
525
525
|
},
|
|
526
526
|
{
|
|
527
527
|
"pathPattern": "/me/calendar/getSchedule",
|
|
@@ -2140,6 +2140,24 @@
|
|
|
2140
2140
|
"acceptType": "text/vtt",
|
|
2141
2141
|
"llmTip": "Returns the transcript content in WebVTT format with speaker identification and timestamps."
|
|
2142
2142
|
},
|
|
2143
|
+
{
|
|
2144
|
+
"pathPattern": "/me/adhocCalls/getAllTranscripts(userId='{userId}',startDateTime={startDateTime},endDateTime={endDateTime})",
|
|
2145
|
+
"method": "get",
|
|
2146
|
+
"toolName": "list-adhoc-call-transcripts",
|
|
2147
|
+
"presets": ["teams", "work"],
|
|
2148
|
+
"workScopes": ["CallTranscripts.Read.All"],
|
|
2149
|
+
"skipEncoding": ["startDateTime", "endDateTime"],
|
|
2150
|
+
"llmTip": "Lists transcripts of ad hoc calls (PSTN, 1:1 and group calls) started by the signed-in user. Use this for calls that have no calendar event and no online meeting, e.g. recordings named 'Anruf mit ...'. userId must be the signed-in user's object id (from get-current-user), not an email. startDateTime and endDateTime are required ISO 8601 UTC timestamps such as 2026-08-01T00:00:00Z. Each item carries callId and id (the transcript id) for get-adhoc-call-transcript-content; contentCorrelationId ends with the yyyyMMdd_HHmmss stamp that also appears in the recording file name in OneDrive. Do not use $filter, $orderby or $top."
|
|
2151
|
+
},
|
|
2152
|
+
{
|
|
2153
|
+
"pathPattern": "/me/adhocCalls/{adhocCall-id}/transcripts/{callTranscript-id}/content",
|
|
2154
|
+
"method": "get",
|
|
2155
|
+
"toolName": "get-adhoc-call-transcript-content",
|
|
2156
|
+
"presets": ["teams", "work"],
|
|
2157
|
+
"workScopes": ["CallTranscripts.Read.All"],
|
|
2158
|
+
"acceptType": "text/vtt",
|
|
2159
|
+
"llmTip": "Returns the transcript of an ad hoc call as WebVTT with speaker tags and timestamps. Take adhocCallId (the callId) and callTranscriptId (the id) from list-adhoc-call-transcripts; copy both exactly. On 403 SpeakerAttributionNotAllowed retry with Accept set to application/vnd.microsoft.graph.transcript+text."
|
|
2160
|
+
},
|
|
2143
2161
|
{
|
|
2144
2162
|
"pathPattern": "/me/onlineMeetings/{onlineMeeting-id}/recordings",
|
|
2145
2163
|
"method": "get",
|