@softeria/ms-365-mcp-server 0.90.0 → 0.92.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.
@@ -521,6 +521,13 @@
521
521
  "scopes": ["Files.Read"],
522
522
  "llmTip": "Generate a short-lived embeddable preview URL for a file (Office docs, PDFs, images). Body: { page?: number | string, zoom?: number, viewer?: 'onedrive' | 'office' }. Returns getUrl (interactive) and postUrl (form-post). Useful for surfacing inline previews in summary emails or chat messages without needing the recipient to open the file."
523
523
  },
524
+ {
525
+ "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/thumbnails",
526
+ "method": "get",
527
+ "toolName": "list-drive-item-thumbnails",
528
+ "scopes": ["Files.Read"],
529
+ "llmTip": "Lists thumbnail sets for a file. Each set contains small (96px), medium (176px), large (800px) thumbnails with url and dimensions. Returns empty for unsupported types (text docs). Use $select=small,medium,large or $expand=small($select=url) to fetch specific sizes. The returned URLs are short-lived — fetch the bytes immediately."
530
+ },
524
531
  {
525
532
  "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/permissions",
526
533
  "method": "get",
@@ -1757,5 +1764,33 @@
1757
1764
  "toolName": "get-sensitivity-label",
1758
1765
  "workScopes": ["SensitivityLabel.Read"],
1759
1766
  "llmTip": "Gets a single MIP sensitivity label by id. Use list-sensitivity-labels to find ids. Not supported for personal Microsoft accounts."
1767
+ },
1768
+ {
1769
+ "pathPattern": "/me/messages/{message-id}/copy",
1770
+ "method": "post",
1771
+ "toolName": "copy-mail-message",
1772
+ "scopes": ["Mail.ReadWrite"],
1773
+ "llmTip": "Copies a message to another mail folder. Body: { DestinationId: '<mailFolder-id or well-known name like inbox, archive, junkemail>' }. Returns the newly created message (with a new id) in the destination folder. For moving instead of copying, use move-mail-message."
1774
+ },
1775
+ {
1776
+ "pathPattern": "/me/mailFolders/{mailFolder-id}/messages/delta()",
1777
+ "method": "get",
1778
+ "toolName": "list-mail-folder-messages-delta",
1779
+ "scopes": ["Mail.Read"],
1780
+ "llmTip": "Incremental sync of messages within a mail folder. Graph only supports delta scoped to a folder — use mailFolder-id = 'inbox' for the well-known inbox, or another folder id from list-mail-folders. First call returns all messages plus @odata.deltaLink; subsequent calls with that link return only changes (created/updated/deleted). @odata.nextLink paginates within a single delta window. Deltas expire after ~30 days of inactivity — start over if the server returns 410. Prefer this over full re-list for polling."
1781
+ },
1782
+ {
1783
+ "pathPattern": "/me/outlook/masterCategories",
1784
+ "method": "get",
1785
+ "toolName": "list-outlook-categories",
1786
+ "scopes": ["MailboxSettings.Read"],
1787
+ "llmTip": "Lists the user's Outlook categories (colored labels) used to tag messages, events, contacts, and tasks. Each category has displayName and color (preset0 through preset24, or 'none'). Use this to show available tags before applying via update-mail-message or update-calendar-event with body { categories: ['Category Name'] }."
1788
+ },
1789
+ {
1790
+ "pathPattern": "/me/outlook/masterCategories",
1791
+ "method": "post",
1792
+ "toolName": "create-outlook-category",
1793
+ "scopes": ["MailboxSettings.ReadWrite"],
1794
+ "llmTip": "Creates a new Outlook category. Body: { displayName (unique), color (one of: none, preset0 … preset24 — maps to red, orange, yellow, green, teal, olive, blue, purple, cranberry, steel, dark-steel, gray, dark-gray, black, dark-red, dark-orange, dark-yellow, dark-green, dark-teal, dark-olive, dark-blue, dark-purple, dark-cranberry) }. Category names are case-sensitive when applied to messages/events."
1760
1795
  }
1761
1796
  ]
@@ -916,6 +916,27 @@ const microsoft_graph_permissionCollectionResponse = z.object({
916
916
  "@odata.nextLink": z.string().nullable(),
917
917
  value: z.array(microsoft_graph_permission)
918
918
  }).partial().passthrough();
919
+ const microsoft_graph_thumbnail = z.object({
920
+ content: z.string().describe("The content stream for the thumbnail.").nullish(),
921
+ height: z.number().gte(-2147483648).lte(2147483647).describe("The height of the thumbnail, in pixels.").nullish(),
922
+ sourceItemId: z.string().describe(
923
+ "The unique identifier of the item that provided the thumbnail. This is only available when a folder thumbnail is requested."
924
+ ).nullish(),
925
+ url: z.string().describe("The URL used to fetch the thumbnail content.").nullish(),
926
+ width: z.number().gte(-2147483648).lte(2147483647).describe("The width of the thumbnail, in pixels.").nullish()
927
+ }).passthrough();
928
+ const microsoft_graph_thumbnailSet = z.object({
929
+ id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
930
+ large: microsoft_graph_thumbnail.optional(),
931
+ medium: microsoft_graph_thumbnail.optional(),
932
+ small: microsoft_graph_thumbnail.optional(),
933
+ source: microsoft_graph_thumbnail.optional()
934
+ }).passthrough();
935
+ const microsoft_graph_thumbnailSetCollectionResponse = z.object({
936
+ "@odata.count": z.number().int().nullable(),
937
+ "@odata.nextLink": z.string().nullable(),
938
+ value: z.array(microsoft_graph_thumbnailSet)
939
+ }).partial().passthrough();
919
940
  const microsoft_graph_publicationFacet = z.object({
920
941
  checkedOutBy: microsoft_graph_identitySet.optional(),
921
942
  level: z.string().describe(
@@ -3476,6 +3497,46 @@ const microsoft_graph_callTranscriptCollectionResponse = z.object({
3476
3497
  "@odata.nextLink": z.string().nullable(),
3477
3498
  value: z.array(microsoft_graph_callTranscript)
3478
3499
  }).partial().passthrough();
3500
+ const microsoft_graph_categoryColor = z.enum([
3501
+ "none",
3502
+ "preset0",
3503
+ "preset1",
3504
+ "preset2",
3505
+ "preset3",
3506
+ "preset4",
3507
+ "preset5",
3508
+ "preset6",
3509
+ "preset7",
3510
+ "preset8",
3511
+ "preset9",
3512
+ "preset10",
3513
+ "preset11",
3514
+ "preset12",
3515
+ "preset13",
3516
+ "preset14",
3517
+ "preset15",
3518
+ "preset16",
3519
+ "preset17",
3520
+ "preset18",
3521
+ "preset19",
3522
+ "preset20",
3523
+ "preset21",
3524
+ "preset22",
3525
+ "preset23",
3526
+ "preset24"
3527
+ ]);
3528
+ const microsoft_graph_outlookCategory = z.object({
3529
+ id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
3530
+ color: microsoft_graph_categoryColor.optional(),
3531
+ displayName: z.string().describe(
3532
+ "A unique name that identifies a category in the user's mailbox. After a category is created, the name cannot be changed. Read-only."
3533
+ ).nullish()
3534
+ }).passthrough();
3535
+ const microsoft_graph_outlookCategoryCollectionResponse = z.object({
3536
+ "@odata.count": z.number().int().nullable(),
3537
+ "@odata.nextLink": z.string().nullable(),
3538
+ value: z.array(microsoft_graph_outlookCategory)
3539
+ }).partial().passthrough();
3479
3540
  const microsoft_graph_personType = z.object({
3480
3541
  class: z.string().describe("The type of data source, such as Person.").nullish(),
3481
3542
  subclass: z.string().describe("The secondary type of data source, such as OrganizationUser.").nullish()
@@ -4525,6 +4586,9 @@ const schemas = {
4525
4586
  create_drive_item_preview_Body,
4526
4587
  microsoft_graph_itemPreviewInfo,
4527
4588
  microsoft_graph_permissionCollectionResponse,
4589
+ microsoft_graph_thumbnail,
4590
+ microsoft_graph_thumbnailSet,
4591
+ microsoft_graph_thumbnailSetCollectionResponse,
4528
4592
  microsoft_graph_publicationFacet,
4529
4593
  microsoft_graph_driveItemVersion,
4530
4594
  microsoft_graph_driveItemVersionCollectionResponse,
@@ -4772,6 +4836,9 @@ const schemas = {
4772
4836
  microsoft_graph_callRecordingCollectionResponse,
4773
4837
  microsoft_graph_callTranscript,
4774
4838
  microsoft_graph_callTranscriptCollectionResponse,
4839
+ microsoft_graph_categoryColor,
4840
+ microsoft_graph_outlookCategory,
4841
+ microsoft_graph_outlookCategoryCollectionResponse,
4775
4842
  microsoft_graph_personType,
4776
4843
  microsoft_graph_phoneType,
4777
4844
  microsoft_graph_phone,
@@ -5726,6 +5793,56 @@ Items with this property set should be removed from your local state.`,
5726
5793
  ],
5727
5794
  response: z.void()
5728
5795
  },
5796
+ {
5797
+ method: "get",
5798
+ path: "/drives/:driveId/items/:driveItemId/thumbnails",
5799
+ alias: "list-drive-item-thumbnails",
5800
+ description: `Collection of thumbnailSet objects associated with the item. For more information, see getting thumbnails. Read-only. Nullable.`,
5801
+ requestFormat: "json",
5802
+ parameters: [
5803
+ {
5804
+ name: "$top",
5805
+ type: "Query",
5806
+ schema: z.number().int().gte(0).describe("Show only the first n items").optional()
5807
+ },
5808
+ {
5809
+ name: "$skip",
5810
+ type: "Query",
5811
+ schema: z.number().int().gte(0).describe("Skip the first n items").optional()
5812
+ },
5813
+ {
5814
+ name: "$search",
5815
+ type: "Query",
5816
+ schema: z.string().describe("Search items by search phrases").optional()
5817
+ },
5818
+ {
5819
+ name: "$filter",
5820
+ type: "Query",
5821
+ schema: z.string().describe("Filter items by property values").optional()
5822
+ },
5823
+ {
5824
+ name: "$count",
5825
+ type: "Query",
5826
+ schema: z.boolean().describe("Include count of items").optional()
5827
+ },
5828
+ {
5829
+ name: "$orderby",
5830
+ type: "Query",
5831
+ schema: z.array(z.string()).describe("Order items by property values").optional()
5832
+ },
5833
+ {
5834
+ name: "$select",
5835
+ type: "Query",
5836
+ schema: z.array(z.string()).describe("Select properties to be returned").optional()
5837
+ },
5838
+ {
5839
+ name: "$expand",
5840
+ type: "Query",
5841
+ schema: z.array(z.string()).describe("Expand related entities").optional()
5842
+ }
5843
+ ],
5844
+ response: z.void()
5845
+ },
5729
5846
  {
5730
5847
  method: "get",
5731
5848
  path: "/drives/:driveId/items/:driveItemId/versions",
@@ -8793,6 +8910,66 @@ folder collection and navigate to another folder. By default, this operation doe
8793
8910
  ],
8794
8911
  response: z.void()
8795
8912
  },
8913
+ {
8914
+ method: "get",
8915
+ path: "/me/mailFolders/:mailFolderId/messages/delta()",
8916
+ alias: "list-mail-folder-messages-delta",
8917
+ description: `Get a set of messages added, deleted, or updated in a specified folder. A delta function call for messages in a folder is similar to a GET request, except that by appropriately
8918
+ applying state tokens in one or more of these calls, you can [query for incremental changes in the messages in
8919
+ that folder](/graph/delta-query-messages). It allows you to maintain and synchronize a local store of a user's messages without
8920
+ having to fetch the entire set of messages from the server every time.`,
8921
+ requestFormat: "json",
8922
+ parameters: [
8923
+ {
8924
+ name: "changeType",
8925
+ type: "Query",
8926
+ schema: z.string().describe(
8927
+ "A custom query option to filter the delta response based on the type of change. Supported values are created, updated or deleted."
8928
+ ).optional()
8929
+ },
8930
+ {
8931
+ name: "$top",
8932
+ type: "Query",
8933
+ schema: z.number().int().gte(0).describe("Show only the first n items").optional()
8934
+ },
8935
+ {
8936
+ name: "$skip",
8937
+ type: "Query",
8938
+ schema: z.number().int().gte(0).describe("Skip the first n items").optional()
8939
+ },
8940
+ {
8941
+ name: "$search",
8942
+ type: "Query",
8943
+ schema: z.string().describe("Search items by search phrases").optional()
8944
+ },
8945
+ {
8946
+ name: "$filter",
8947
+ type: "Query",
8948
+ schema: z.string().describe("Filter items by property values").optional()
8949
+ },
8950
+ {
8951
+ name: "$count",
8952
+ type: "Query",
8953
+ schema: z.boolean().describe("Include count of items").optional()
8954
+ },
8955
+ {
8956
+ name: "$select",
8957
+ type: "Query",
8958
+ schema: z.array(z.string()).describe("Select properties to be returned").optional()
8959
+ },
8960
+ {
8961
+ name: "$orderby",
8962
+ type: "Query",
8963
+ schema: z.array(z.string()).describe("Order items by property values").optional()
8964
+ },
8965
+ {
8966
+ name: "$expand",
8967
+ type: "Query",
8968
+ schema: z.array(z.string()).describe("Expand related entities").optional()
8969
+ }
8970
+ ],
8971
+ response: z.void()
8972
+ },
8796
8973
  {
8797
8974
  method: "get",
8798
8975
  path: "/me/manager",
@@ -9209,6 +9386,22 @@ resource.`,
9209
9386
  ],
9210
9387
  response: z.void()
9211
9388
  },
9389
+ {
9390
+ method: "post",
9391
+ path: "/me/messages/:messageId/copy",
9392
+ alias: "copy-mail-message",
9393
+ description: `Copy a message to a folder within the user's mailbox.`,
9394
+ requestFormat: "json",
9395
+ parameters: [
9396
+ {
9397
+ name: "body",
9398
+ description: `Action parameters`,
9399
+ type: "Body",
9400
+ schema: z.object({ DestinationId: z.string() }).partial().passthrough()
9401
+ }
9402
+ ],
9403
+ response: z.void()
9404
+ },
9212
9405
  {
9213
9406
  method: "post",
9214
9407
  path: "/me/messages/:messageId/createForward",
@@ -10103,6 +10296,72 @@ resource.`,
10103
10296
  requestFormat: "json",
10104
10297
  response: z.void()
10105
10298
  },
10299
+ {
10300
+ method: "get",
10301
+ path: "/me/outlook/masterCategories",
10302
+ alias: "list-outlook-categories",
10303
+ description: `Get all the categories that have been defined for a user.`,
10304
+ requestFormat: "json",
10305
+ parameters: [
10306
+ {
10307
+ name: "$top",
10308
+ type: "Query",
10309
+ schema: z.number().int().gte(0).describe("Show only the first n items").optional()
10310
+ },
10311
+ {
10312
+ name: "$skip",
10313
+ type: "Query",
10314
+ schema: z.number().int().gte(0).describe("Skip the first n items").optional()
10315
+ },
10316
+ {
10317
+ name: "$search",
10318
+ type: "Query",
10319
+ schema: z.string().describe("Search items by search phrases").optional()
10320
+ },
10321
+ {
10322
+ name: "$filter",
10323
+ type: "Query",
10324
+ schema: z.string().describe("Filter items by property values").optional()
10325
+ },
10326
+ {
10327
+ name: "$count",
10328
+ type: "Query",
10329
+ schema: z.boolean().describe("Include count of items").optional()
10330
+ },
10331
+ {
10332
+ name: "$orderby",
10333
+ type: "Query",
10334
+ schema: z.array(z.string()).describe("Order items by property values").optional()
10335
+ },
10336
+ {
10337
+ name: "$select",
10338
+ type: "Query",
10339
+ schema: z.array(z.string()).describe("Select properties to be returned").optional()
10340
+ },
10341
+ {
10342
+ name: "$expand",
10343
+ type: "Query",
10344
+ schema: z.array(z.string()).describe("Expand related entities").optional()
10345
+ }
10346
+ ],
10347
+ response: z.void()
10348
+ },
10349
+ {
10350
+ method: "post",
10351
+ path: "/me/outlook/masterCategories",
10352
+ alias: "create-outlook-category",
10353
+ description: `Create an outlookCategory object in the user's master list of categories.`,
10354
+ requestFormat: "json",
10355
+ parameters: [
10356
+ {
10357
+ name: "body",
10358
+ description: `New navigation property`,
10359
+ type: "Body",
10360
+ schema: microsoft_graph_outlookCategory
10361
+ }
10362
+ ],
10363
+ response: z.void()
10364
+ },
10106
10365
  {
10107
10366
  method: "get",
10108
10367
  path: "/me/people",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softeria/ms-365-mcp-server",
3
- "version": "0.90.0",
3
+ "version": "0.92.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",
@@ -521,6 +521,13 @@
521
521
  "scopes": ["Files.Read"],
522
522
  "llmTip": "Generate a short-lived embeddable preview URL for a file (Office docs, PDFs, images). Body: { page?: number | string, zoom?: number, viewer?: 'onedrive' | 'office' }. Returns getUrl (interactive) and postUrl (form-post). Useful for surfacing inline previews in summary emails or chat messages without needing the recipient to open the file."
523
523
  },
524
+ {
525
+ "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/thumbnails",
526
+ "method": "get",
527
+ "toolName": "list-drive-item-thumbnails",
528
+ "scopes": ["Files.Read"],
529
+ "llmTip": "Lists thumbnail sets for a file. Each set contains small (96px), medium (176px), large (800px) thumbnails with url and dimensions. Returns empty for unsupported types (text docs). Use $select=small,medium,large or $expand=small($select=url) to fetch specific sizes. The returned URLs are short-lived — fetch the bytes immediately."
530
+ },
524
531
  {
525
532
  "pathPattern": "/drives/{drive-id}/items/{driveItem-id}/permissions",
526
533
  "method": "get",
@@ -1757,5 +1764,33 @@
1757
1764
  "toolName": "get-sensitivity-label",
1758
1765
  "workScopes": ["SensitivityLabel.Read"],
1759
1766
  "llmTip": "Gets a single MIP sensitivity label by id. Use list-sensitivity-labels to find ids. Not supported for personal Microsoft accounts."
1767
+ },
1768
+ {
1769
+ "pathPattern": "/me/messages/{message-id}/copy",
1770
+ "method": "post",
1771
+ "toolName": "copy-mail-message",
1772
+ "scopes": ["Mail.ReadWrite"],
1773
+ "llmTip": "Copies a message to another mail folder. Body: { DestinationId: '<mailFolder-id or well-known name like inbox, archive, junkemail>' }. Returns the newly created message (with a new id) in the destination folder. For moving instead of copying, use move-mail-message."
1774
+ },
1775
+ {
1776
+ "pathPattern": "/me/mailFolders/{mailFolder-id}/messages/delta()",
1777
+ "method": "get",
1778
+ "toolName": "list-mail-folder-messages-delta",
1779
+ "scopes": ["Mail.Read"],
1780
+ "llmTip": "Incremental sync of messages within a mail folder. Graph only supports delta scoped to a folder — use mailFolder-id = 'inbox' for the well-known inbox, or another folder id from list-mail-folders. First call returns all messages plus @odata.deltaLink; subsequent calls with that link return only changes (created/updated/deleted). @odata.nextLink paginates within a single delta window. Deltas expire after ~30 days of inactivity — start over if the server returns 410. Prefer this over full re-list for polling."
1781
+ },
1782
+ {
1783
+ "pathPattern": "/me/outlook/masterCategories",
1784
+ "method": "get",
1785
+ "toolName": "list-outlook-categories",
1786
+ "scopes": ["MailboxSettings.Read"],
1787
+ "llmTip": "Lists the user's Outlook categories (colored labels) used to tag messages, events, contacts, and tasks. Each category has displayName and color (preset0 through preset24, or 'none'). Use this to show available tags before applying via update-mail-message or update-calendar-event with body { categories: ['Category Name'] }."
1788
+ },
1789
+ {
1790
+ "pathPattern": "/me/outlook/masterCategories",
1791
+ "method": "post",
1792
+ "toolName": "create-outlook-category",
1793
+ "scopes": ["MailboxSettings.ReadWrite"],
1794
+ "llmTip": "Creates a new Outlook category. Body: { displayName (unique), color (one of: none, preset0 … preset24 — maps to red, orange, yellow, green, teal, olive, blue, purple, cranberry, steel, dark-steel, gray, dark-gray, black, dark-red, dark-orange, dark-yellow, dark-green, dark-teal, dark-olive, dark-blue, dark-purple, dark-cranberry) }. Category names are case-sensitive when applied to messages/events."
1760
1795
  }
1761
1796
  ]