@softeria/ms-365-mcp-server 0.93.0 → 0.95.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.
@@ -235,6 +235,34 @@
235
235
  "scopes": ["MailboxSettings.ReadWrite"],
236
236
  "llmTip": "Deletes a message rule permanently. Use the Inbox folder ID (get it from list-mail-folders) for inbox rules."
237
237
  },
238
+ {
239
+ "pathPattern": "/me/inferenceClassification/overrides",
240
+ "method": "get",
241
+ "toolName": "list-focused-inbox-overrides",
242
+ "scopes": ["Mail.Read"],
243
+ "llmTip": "Lists Focused Inbox classification overrides — explicit rules that force messages from a given sender (by SMTP address) into either the Focused or Other tab, regardless of what the Outlook ML classifier would predict. Each override has id, classifyAs ('focused' or 'other'), and senderEmailAddress {name, address}. Returns an empty collection if the user has never set an override."
244
+ },
245
+ {
246
+ "pathPattern": "/me/inferenceClassification/overrides",
247
+ "method": "post",
248
+ "toolName": "create-focused-inbox-override",
249
+ "scopes": ["Mail.ReadWrite"],
250
+ "llmTip": "Creates a Focused Inbox override for a sender. Body: { classifyAs: 'focused', senderEmailAddress: { name: 'Display Name', address: 'sender@example.com' } }. classifyAs must be 'focused' or 'other'. If an override already exists for that SMTP address, POST updates the existing override's name and classifyAs (use this to rename a sender). Resolve the sender's address with list-users or by reading a recent mail header — do not invent SMTP addresses."
251
+ },
252
+ {
253
+ "pathPattern": "/me/inferenceClassification/overrides/{inferenceClassificationOverride-id}",
254
+ "method": "patch",
255
+ "toolName": "update-focused-inbox-override",
256
+ "scopes": ["Mail.ReadWrite"],
257
+ "llmTip": "Updates the classifyAs field of an existing override. Body: { classifyAs: 'focused' } or { classifyAs: 'other' }. Per Graph API, PATCH cannot change senderEmailAddress — to change the SMTP address, delete and recreate the override. To rename the display name only, POST a new override with the same SMTP address (it will overwrite the name)."
258
+ },
259
+ {
260
+ "pathPattern": "/me/inferenceClassification/overrides/{inferenceClassificationOverride-id}",
261
+ "method": "delete",
262
+ "toolName": "delete-focused-inbox-override",
263
+ "scopes": ["Mail.ReadWrite"],
264
+ "llmTip": "Deletes a Focused Inbox override. Future messages from that sender revert to the Outlook ML classifier's default behavior. Use list-focused-inbox-overrides to find the ID first."
265
+ },
238
266
  {
239
267
  "pathPattern": "/me/events",
240
268
  "method": "get",
@@ -1380,6 +1408,48 @@
1380
1408
  "workScopes": ["Sites.ReadWrite.All"],
1381
1409
  "llmTip": "Deletes a list item permanently. This cannot be undone — the item is moved to the site recycle bin."
1382
1410
  },
1411
+ {
1412
+ "pathPattern": "/sites/{site-id}/lists",
1413
+ "method": "post",
1414
+ "toolName": "create-sharepoint-list",
1415
+ "workScopes": ["Sites.Manage.All"],
1416
+ "llmTip": "Creates a new SharePoint list in a site. Body: { displayName: 'My List', description: 'Optional', list: { template: 'genericList' }, columns: [ { name: 'Status', text: {} }, { name: 'Due', dateTime: {} } ] }. Templates include genericList, documentLibrary, tasks, calendar, contacts, links, announcements, survey. Columns can be defined inline at creation; otherwise add them later via create-sharepoint-list-column. Use search-sharepoint-sites or get-sharepoint-site-by-path to find the site ID first."
1417
+ },
1418
+ {
1419
+ "pathPattern": "/sites/{site-id}/lists/{list-id}/columns",
1420
+ "method": "get",
1421
+ "toolName": "list-sharepoint-list-columns",
1422
+ "workScopes": ["Sites.Read.All"],
1423
+ "llmTip": "Lists column definitions for a SharePoint list. Returns each column's id, name, displayName, description, type indicator (text, number, choice, dateTime, person, lookup, boolean, calculated, hyperlinkOrPicture, etc.), required, indexed, hidden, readOnly. Use this to discover the schema before creating or updating list items."
1424
+ },
1425
+ {
1426
+ "pathPattern": "/sites/{site-id}/lists/{list-id}/columns",
1427
+ "method": "post",
1428
+ "toolName": "create-sharepoint-list-column",
1429
+ "workScopes": ["Sites.Manage.All"],
1430
+ "llmTip": "Creates a new column on a SharePoint list. Body must include name and exactly one column type property: { name: 'Priority', text: {} } or { name: 'DueDate', dateTime: { format: 'dateOnly' } } or { name: 'Status', choice: { choices: ['Open','In Progress','Done'] } }. Other types: number, boolean, currency, hyperlinkOrPicture, personOrGroup, lookup, calculated. Optional: displayName, description, required, indexed, enforceUniqueValues."
1431
+ },
1432
+ {
1433
+ "pathPattern": "/sites/{site-id}/lists/{list-id}/columns/{columnDefinition-id}",
1434
+ "method": "get",
1435
+ "toolName": "get-sharepoint-list-column",
1436
+ "workScopes": ["Sites.Read.All"],
1437
+ "llmTip": "Gets a specific column definition by ID, including its full type configuration (choices for choice columns, format for dateTime, etc.). Use list-sharepoint-list-columns first to find the column ID."
1438
+ },
1439
+ {
1440
+ "pathPattern": "/sites/{site-id}/lists/{list-id}/columns/{columnDefinition-id}",
1441
+ "method": "patch",
1442
+ "toolName": "update-sharepoint-list-column",
1443
+ "workScopes": ["Sites.Manage.All"],
1444
+ "llmTip": "Updates a column definition. Body: { displayName: 'New name', description: 'New description', required: true, ... }. The column type itself (text, choice, etc.) cannot be changed — only its metadata and per-type options (e.g. choices array for a choice column). Send only the fields you want to change."
1445
+ },
1446
+ {
1447
+ "pathPattern": "/sites/{site-id}/lists/{list-id}/columns/{columnDefinition-id}",
1448
+ "method": "delete",
1449
+ "toolName": "delete-sharepoint-list-column",
1450
+ "workScopes": ["Sites.Manage.All"],
1451
+ "llmTip": "Deletes a column from a SharePoint list. This is irreversible — all data stored in this column across every list item is lost. Confirm with the user before calling. Cannot delete built-in columns (Title, Created, Modified, etc.)."
1452
+ },
1383
1453
  {
1384
1454
  "pathPattern": "/sites/{site-id}/getByPath(path='{path}')",
1385
1455
  "method": "get",
@@ -2585,6 +2585,17 @@ const decline_calendar_event_Body = z.object({
2585
2585
  }).partial().passthrough();
2586
2586
  const forward_calendar_event_Body = z.object({ ToRecipients: z.array(microsoft_graph_recipient), Comment: z.string().nullable() }).partial().passthrough();
2587
2587
  const snooze_calendar_event_reminder_Body = z.object({ NewReminderTime: microsoft_graph_dateTimeTimeZone }).partial().passthrough();
2588
+ const microsoft_graph_inferenceClassificationType = z.enum(["focused", "other"]);
2589
+ const microsoft_graph_inferenceClassificationOverride = z.object({
2590
+ id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
2591
+ classifyAs: microsoft_graph_inferenceClassificationType.optional(),
2592
+ senderEmailAddress: microsoft_graph_emailAddress.optional()
2593
+ }).passthrough();
2594
+ const microsoft_graph_inferenceClassificationOverrideCollectionResponse = z.object({
2595
+ "@odata.count": z.number().int().nullable(),
2596
+ "@odata.nextLink": z.string().nullable(),
2597
+ value: z.array(microsoft_graph_inferenceClassificationOverride)
2598
+ }).partial().passthrough();
2588
2599
  const microsoft_graph_resourceReference = z.object({
2589
2600
  id: z.string().describe("The item's unique identifier.").nullish(),
2590
2601
  type: z.string().describe(
@@ -2996,7 +3007,6 @@ const microsoft_graph_followupFlag = z.object({
2996
3007
  flagStatus: microsoft_graph_followupFlagStatus.optional(),
2997
3008
  startDateTime: microsoft_graph_dateTimeTimeZone.optional()
2998
3009
  }).passthrough();
2999
- const microsoft_graph_inferenceClassificationType = z.enum(["focused", "other"]);
3000
3010
  const microsoft_graph_internetMessageHeader = z.object({
3001
3011
  name: z.string().describe("Represents the key in a key-value pair.").nullish(),
3002
3012
  value: z.string().describe("The value in a key-value pair.").nullish()
@@ -4279,6 +4289,11 @@ const microsoft_graph_listCollectionResponse = z.object({
4279
4289
  "@odata.nextLink": z.string().nullable(),
4280
4290
  value: z.array(microsoft_graph_list)
4281
4291
  }).partial().passthrough();
4292
+ const microsoft_graph_columnDefinitionCollectionResponse = z.object({
4293
+ "@odata.count": z.number().int().nullable(),
4294
+ "@odata.nextLink": z.string().nullable(),
4295
+ value: z.array(microsoft_graph_columnDefinition)
4296
+ }).partial().passthrough();
4282
4297
  const microsoft_graph_listItemCollectionResponse = z.object({
4283
4298
  "@odata.count": z.number().int().nullable(),
4284
4299
  "@odata.nextLink": z.string().nullable(),
@@ -4749,6 +4764,9 @@ const schemas = {
4749
4764
  decline_calendar_event_Body,
4750
4765
  forward_calendar_event_Body,
4751
4766
  snooze_calendar_event_reminder_Body,
4767
+ microsoft_graph_inferenceClassificationType,
4768
+ microsoft_graph_inferenceClassificationOverride,
4769
+ microsoft_graph_inferenceClassificationOverrideCollectionResponse,
4752
4770
  microsoft_graph_resourceReference,
4753
4771
  microsoft_graph_resourceVisualization,
4754
4772
  microsoft_graph_entity,
@@ -4786,7 +4804,6 @@ const schemas = {
4786
4804
  microsoft_graph_messageRule,
4787
4805
  microsoft_graph_followupFlagStatus,
4788
4806
  microsoft_graph_followupFlag,
4789
- microsoft_graph_inferenceClassificationType,
4790
4807
  microsoft_graph_internetMessageHeader,
4791
4808
  microsoft_graph_message,
4792
4809
  microsoft_graph_mailFolder,
@@ -4921,6 +4938,7 @@ const schemas = {
4921
4938
  microsoft_graph_siteCollectionResponse,
4922
4939
  microsoft_graph_baseItemCollectionResponse,
4923
4940
  microsoft_graph_listCollectionResponse,
4941
+ microsoft_graph_columnDefinitionCollectionResponse,
4924
4942
  microsoft_graph_listItemCollectionResponse,
4925
4943
  microsoft_graph_endpointType,
4926
4944
  microsoft_graph_communicationsIdentitySet,
@@ -8453,6 +8471,105 @@ Based on this value, you can better adjust the parameters and call findMeetingTi
8453
8471
  ],
8454
8472
  response: z.void()
8455
8473
  },
8474
+ {
8475
+ method: "get",
8476
+ path: "/me/inferenceClassification/overrides",
8477
+ alias: "list-focused-inbox-overrides",
8478
+ description: `Get the overrides that a user has set up to always classify messages from certain senders in specific ways. Each override corresponds to an SMTP address of a sender. Initially, a user does not have any overrides.`,
8479
+ requestFormat: "json",
8480
+ parameters: [
8481
+ {
8482
+ name: "$top",
8483
+ type: "Query",
8484
+ schema: z.number().int().gte(0).describe("Show only the first n items").optional()
8485
+ },
8486
+ {
8487
+ name: "$skip",
8488
+ type: "Query",
8489
+ schema: z.number().int().gte(0).describe("Skip the first n items").optional()
8490
+ },
8491
+ {
8492
+ name: "$search",
8493
+ type: "Query",
8494
+ schema: z.string().describe("Search items by search phrases").optional()
8495
+ },
8496
+ {
8497
+ name: "$filter",
8498
+ type: "Query",
8499
+ schema: z.string().describe("Filter items by property values").optional()
8500
+ },
8501
+ {
8502
+ name: "$count",
8503
+ type: "Query",
8504
+ schema: z.boolean().describe("Include count of items").optional()
8505
+ },
8506
+ {
8507
+ name: "$orderby",
8508
+ type: "Query",
8509
+ schema: z.array(z.string()).describe("Order items by property values").optional()
8510
+ },
8511
+ {
8512
+ name: "$select",
8513
+ type: "Query",
8514
+ schema: z.array(z.string()).describe("Select properties to be returned").optional()
8515
+ },
8516
+ {
8517
+ name: "$expand",
8518
+ type: "Query",
8519
+ schema: z.array(z.string()).describe("Expand related entities").optional()
8520
+ }
8521
+ ],
8522
+ response: z.void()
8523
+ },
8524
+ {
8525
+ method: "post",
8526
+ path: "/me/inferenceClassification/overrides",
8527
+ alias: "create-focused-inbox-override",
8528
+ description: `Create an override for a sender identified by an SMTP address. Future messages from that SMTP address will be consistently classified
8529
+ as specified in the override. Note`,
8530
+ requestFormat: "json",
8531
+ parameters: [
8532
+ {
8533
+ name: "body",
8534
+ description: `New navigation property`,
8535
+ type: "Body",
8536
+ schema: microsoft_graph_inferenceClassificationOverride
8537
+ }
8538
+ ],
8539
+ response: z.void()
8540
+ },
8541
+ {
8542
+ method: "patch",
8543
+ path: "/me/inferenceClassification/overrides/:inferenceClassificationOverrideId",
8544
+ alias: "update-focused-inbox-override",
8545
+ description: `Change the classifyAs field of an override as specified. You cannot use PATCH to change any other fields in an inferenceClassificationOverride instance. If an override exists for a sender and the sender changes his/her display name, you can use POST to force an update to the name field in the existing override. If an override exists for a sender and the sender changes his/her SMTP address, deleting the existing override and creating a new one with
8546
+ the new SMTP address is the only way to 'update' the override for this sender.`,
8547
+ requestFormat: "json",
8548
+ parameters: [
8549
+ {
8550
+ name: "body",
8551
+ description: `New navigation property values`,
8552
+ type: "Body",
8553
+ schema: microsoft_graph_inferenceClassificationOverride
8554
+ }
8555
+ ],
8556
+ response: z.void()
8557
+ },
8558
+ {
8559
+ method: "delete",
8560
+ path: "/me/inferenceClassification/overrides/:inferenceClassificationOverrideId",
8561
+ alias: "delete-focused-inbox-override",
8562
+ description: `Delete an override specified by its ID.`,
8563
+ requestFormat: "json",
8564
+ parameters: [
8565
+ {
8566
+ name: "If-Match",
8567
+ type: "Header",
8568
+ schema: z.string().describe("ETag").optional()
8569
+ }
8570
+ ],
8571
+ response: z.void()
8572
+ },
8456
8573
  {
8457
8574
  method: "get",
8458
8575
  path: "/me/insights/trending",
@@ -11585,6 +11702,22 @@ To list them, include system in your $select statement.`,
11585
11702
  ],
11586
11703
  response: z.void()
11587
11704
  },
11705
+ {
11706
+ method: "post",
11707
+ path: "/sites/:siteId/lists",
11708
+ alias: "create-sharepoint-list",
11709
+ description: `Create a new list in a site.`,
11710
+ requestFormat: "json",
11711
+ parameters: [
11712
+ {
11713
+ name: "body",
11714
+ description: `New navigation property`,
11715
+ type: "Body",
11716
+ schema: microsoft_graph_list
11717
+ }
11718
+ ],
11719
+ response: z.void()
11720
+ },
11588
11721
  {
11589
11722
  method: "get",
11590
11723
  path: "/sites/:siteId/lists/:listId",
@@ -11605,6 +11738,191 @@ To list them, include system in your $select statement.`,
11605
11738
  ],
11606
11739
  response: z.void()
11607
11740
  },
11741
+ {
11742
+ method: "get",
11743
+ path: "/sites/:siteId/lists/:listId/columns",
11744
+ alias: "list-sharepoint-list-columns",
11745
+ description: `Get the collection of columns represented as columnDefinition resources in a list.`,
11746
+ requestFormat: "json",
11747
+ parameters: [
11748
+ {
11749
+ name: "$top",
11750
+ type: "Query",
11751
+ schema: z.number().int().gte(0).describe("Show only the first n items").optional()
11752
+ },
11753
+ {
11754
+ name: "$skip",
11755
+ type: "Query",
11756
+ schema: z.number().int().gte(0).describe("Skip the first n items").optional()
11757
+ },
11758
+ {
11759
+ name: "$search",
11760
+ type: "Query",
11761
+ schema: z.string().describe("Search items by search phrases").optional()
11762
+ },
11763
+ {
11764
+ name: "$filter",
11765
+ type: "Query",
11766
+ schema: z.string().describe("Filter items by property values").optional()
11767
+ },
11768
+ {
11769
+ name: "$count",
11770
+ type: "Query",
11771
+ schema: z.boolean().describe("Include count of items").optional()
11772
+ },
11773
+ {
11774
+ name: "$orderby",
11775
+ type: "Query",
11776
+ schema: z.array(z.string()).describe("Order items by property values").optional()
11777
+ },
11778
+ {
11779
+ name: "$select",
11780
+ type: "Query",
11781
+ schema: z.array(z.string()).describe("Select properties to be returned").optional()
11782
+ },
11783
+ {
11784
+ name: "$expand",
11785
+ type: "Query",
11786
+ schema: z.array(z.string()).describe("Expand related entities").optional()
11787
+ }
11788
+ ],
11789
+ response: z.void()
11790
+ },
11791
+ {
11792
+ method: "post",
11793
+ path: "/sites/:siteId/lists/:listId/columns",
11794
+ alias: "create-sharepoint-list-column",
11795
+ description: `Create a column for a list with a request that specifies a columnDefinition.`,
11796
+ requestFormat: "json",
11797
+ parameters: [
11798
+ {
11799
+ name: "body",
11800
+ description: `New navigation property`,
11801
+ type: "Body",
11802
+ schema: z.object({
11803
+ id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
11804
+ name: z.string().describe(
11805
+ "The API-facing name of the column as it appears in the fields on a listItem. For the user-facing name, see displayName."
11806
+ ).nullish(),
11807
+ displayName: z.string().describe("The user-facing name of the column.").nullish(),
11808
+ description: z.string().describe("The user-facing description of the column.").nullish(),
11809
+ type: microsoft_graph_columnTypes.optional(),
11810
+ boolean: microsoft_graph_booleanColumn.optional(),
11811
+ calculated: microsoft_graph_calculatedColumn.optional(),
11812
+ choice: microsoft_graph_choiceColumn.optional(),
11813
+ columnGroup: z.string().describe(
11814
+ "For site columns, the name of the group this column belongs to. Helps organize related columns."
11815
+ ).nullish(),
11816
+ contentApprovalStatus: microsoft_graph_contentApprovalStatusColumn.optional(),
11817
+ currency: microsoft_graph_currencyColumn.optional(),
11818
+ dateTime: microsoft_graph_dateTimeColumn.optional(),
11819
+ defaultValue: microsoft_graph_defaultColumnValue.optional(),
11820
+ enforceUniqueValues: z.boolean().describe("If true, no two list items may have the same value for this column.").nullish(),
11821
+ geolocation: microsoft_graph_geolocationColumn.optional(),
11822
+ hidden: z.boolean().describe("Specifies whether the column is displayed in the user interface.").nullish(),
11823
+ hyperlinkOrPicture: microsoft_graph_hyperlinkOrPictureColumn.optional(),
11824
+ indexed: z.boolean().describe(
11825
+ "Specifies whether the column values can be used for sorting and searching."
11826
+ ).nullish(),
11827
+ isDeletable: z.boolean().describe("Indicates whether this column can be deleted.").nullish(),
11828
+ isReorderable: z.boolean().describe("Indicates whether values in the column can be reordered. Read-only.").nullish(),
11829
+ isSealed: z.boolean().describe("Specifies whether the column can be changed.").nullish(),
11830
+ lookup: microsoft_graph_lookupColumn.optional(),
11831
+ number: microsoft_graph_numberColumn.optional(),
11832
+ personOrGroup: microsoft_graph_personOrGroupColumn.optional(),
11833
+ propagateChanges: z.boolean().describe(
11834
+ "If 'true', changes to this column will be propagated to lists that implement the column."
11835
+ ).nullish()
11836
+ }).passthrough().passthrough()
11837
+ }
11838
+ ],
11839
+ response: z.void()
11840
+ },
11841
+ {
11842
+ method: "get",
11843
+ path: "/sites/:siteId/lists/:listId/columns/:columnDefinitionId",
11844
+ alias: "get-sharepoint-list-column",
11845
+ description: `The collection of field definitions for this list.`,
11846
+ requestFormat: "json",
11847
+ parameters: [
11848
+ {
11849
+ name: "$select",
11850
+ type: "Query",
11851
+ schema: z.array(z.string()).describe("Select properties to be returned").optional()
11852
+ },
11853
+ {
11854
+ name: "$expand",
11855
+ type: "Query",
11856
+ schema: z.array(z.string()).describe("Expand related entities").optional()
11857
+ }
11858
+ ],
11859
+ response: z.void()
11860
+ },
11861
+ {
11862
+ method: "patch",
11863
+ path: "/sites/:siteId/lists/:listId/columns/:columnDefinitionId",
11864
+ alias: "update-sharepoint-list-column",
11865
+ description: `Update the navigation property columns in sites`,
11866
+ requestFormat: "json",
11867
+ parameters: [
11868
+ {
11869
+ name: "body",
11870
+ description: `New navigation property values`,
11871
+ type: "Body",
11872
+ schema: z.object({
11873
+ id: z.string().describe("The unique identifier for an entity. Read-only.").optional(),
11874
+ name: z.string().describe(
11875
+ "The API-facing name of the column as it appears in the fields on a listItem. For the user-facing name, see displayName."
11876
+ ).nullish(),
11877
+ displayName: z.string().describe("The user-facing name of the column.").nullish(),
11878
+ description: z.string().describe("The user-facing description of the column.").nullish(),
11879
+ type: microsoft_graph_columnTypes.optional(),
11880
+ boolean: microsoft_graph_booleanColumn.optional(),
11881
+ calculated: microsoft_graph_calculatedColumn.optional(),
11882
+ choice: microsoft_graph_choiceColumn.optional(),
11883
+ columnGroup: z.string().describe(
11884
+ "For site columns, the name of the group this column belongs to. Helps organize related columns."
11885
+ ).nullish(),
11886
+ contentApprovalStatus: microsoft_graph_contentApprovalStatusColumn.optional(),
11887
+ currency: microsoft_graph_currencyColumn.optional(),
11888
+ dateTime: microsoft_graph_dateTimeColumn.optional(),
11889
+ defaultValue: microsoft_graph_defaultColumnValue.optional(),
11890
+ enforceUniqueValues: z.boolean().describe("If true, no two list items may have the same value for this column.").nullish(),
11891
+ geolocation: microsoft_graph_geolocationColumn.optional(),
11892
+ hidden: z.boolean().describe("Specifies whether the column is displayed in the user interface.").nullish(),
11893
+ hyperlinkOrPicture: microsoft_graph_hyperlinkOrPictureColumn.optional(),
11894
+ indexed: z.boolean().describe(
11895
+ "Specifies whether the column values can be used for sorting and searching."
11896
+ ).nullish(),
11897
+ isDeletable: z.boolean().describe("Indicates whether this column can be deleted.").nullish(),
11898
+ isReorderable: z.boolean().describe("Indicates whether values in the column can be reordered. Read-only.").nullish(),
11899
+ isSealed: z.boolean().describe("Specifies whether the column can be changed.").nullish(),
11900
+ lookup: microsoft_graph_lookupColumn.optional(),
11901
+ number: microsoft_graph_numberColumn.optional(),
11902
+ personOrGroup: microsoft_graph_personOrGroupColumn.optional(),
11903
+ propagateChanges: z.boolean().describe(
11904
+ "If 'true', changes to this column will be propagated to lists that implement the column."
11905
+ ).nullish()
11906
+ }).passthrough().passthrough()
11907
+ }
11908
+ ],
11909
+ response: z.void()
11910
+ },
11911
+ {
11912
+ method: "delete",
11913
+ path: "/sites/:siteId/lists/:listId/columns/:columnDefinitionId",
11914
+ alias: "delete-sharepoint-list-column",
11915
+ description: `Delete navigation property columns for sites`,
11916
+ requestFormat: "json",
11917
+ parameters: [
11918
+ {
11919
+ name: "If-Match",
11920
+ type: "Header",
11921
+ schema: z.string().describe("ETag").optional()
11922
+ }
11923
+ ],
11924
+ response: z.void()
11925
+ },
11608
11926
  {
11609
11927
  method: "get",
11610
11928
  path: "/sites/:siteId/lists/:listId/items",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softeria/ms-365-mcp-server",
3
- "version": "0.93.0",
3
+ "version": "0.95.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",
@@ -235,6 +235,34 @@
235
235
  "scopes": ["MailboxSettings.ReadWrite"],
236
236
  "llmTip": "Deletes a message rule permanently. Use the Inbox folder ID (get it from list-mail-folders) for inbox rules."
237
237
  },
238
+ {
239
+ "pathPattern": "/me/inferenceClassification/overrides",
240
+ "method": "get",
241
+ "toolName": "list-focused-inbox-overrides",
242
+ "scopes": ["Mail.Read"],
243
+ "llmTip": "Lists Focused Inbox classification overrides — explicit rules that force messages from a given sender (by SMTP address) into either the Focused or Other tab, regardless of what the Outlook ML classifier would predict. Each override has id, classifyAs ('focused' or 'other'), and senderEmailAddress {name, address}. Returns an empty collection if the user has never set an override."
244
+ },
245
+ {
246
+ "pathPattern": "/me/inferenceClassification/overrides",
247
+ "method": "post",
248
+ "toolName": "create-focused-inbox-override",
249
+ "scopes": ["Mail.ReadWrite"],
250
+ "llmTip": "Creates a Focused Inbox override for a sender. Body: { classifyAs: 'focused', senderEmailAddress: { name: 'Display Name', address: 'sender@example.com' } }. classifyAs must be 'focused' or 'other'. If an override already exists for that SMTP address, POST updates the existing override's name and classifyAs (use this to rename a sender). Resolve the sender's address with list-users or by reading a recent mail header — do not invent SMTP addresses."
251
+ },
252
+ {
253
+ "pathPattern": "/me/inferenceClassification/overrides/{inferenceClassificationOverride-id}",
254
+ "method": "patch",
255
+ "toolName": "update-focused-inbox-override",
256
+ "scopes": ["Mail.ReadWrite"],
257
+ "llmTip": "Updates the classifyAs field of an existing override. Body: { classifyAs: 'focused' } or { classifyAs: 'other' }. Per Graph API, PATCH cannot change senderEmailAddress — to change the SMTP address, delete and recreate the override. To rename the display name only, POST a new override with the same SMTP address (it will overwrite the name)."
258
+ },
259
+ {
260
+ "pathPattern": "/me/inferenceClassification/overrides/{inferenceClassificationOverride-id}",
261
+ "method": "delete",
262
+ "toolName": "delete-focused-inbox-override",
263
+ "scopes": ["Mail.ReadWrite"],
264
+ "llmTip": "Deletes a Focused Inbox override. Future messages from that sender revert to the Outlook ML classifier's default behavior. Use list-focused-inbox-overrides to find the ID first."
265
+ },
238
266
  {
239
267
  "pathPattern": "/me/events",
240
268
  "method": "get",
@@ -1380,6 +1408,48 @@
1380
1408
  "workScopes": ["Sites.ReadWrite.All"],
1381
1409
  "llmTip": "Deletes a list item permanently. This cannot be undone — the item is moved to the site recycle bin."
1382
1410
  },
1411
+ {
1412
+ "pathPattern": "/sites/{site-id}/lists",
1413
+ "method": "post",
1414
+ "toolName": "create-sharepoint-list",
1415
+ "workScopes": ["Sites.Manage.All"],
1416
+ "llmTip": "Creates a new SharePoint list in a site. Body: { displayName: 'My List', description: 'Optional', list: { template: 'genericList' }, columns: [ { name: 'Status', text: {} }, { name: 'Due', dateTime: {} } ] }. Templates include genericList, documentLibrary, tasks, calendar, contacts, links, announcements, survey. Columns can be defined inline at creation; otherwise add them later via create-sharepoint-list-column. Use search-sharepoint-sites or get-sharepoint-site-by-path to find the site ID first."
1417
+ },
1418
+ {
1419
+ "pathPattern": "/sites/{site-id}/lists/{list-id}/columns",
1420
+ "method": "get",
1421
+ "toolName": "list-sharepoint-list-columns",
1422
+ "workScopes": ["Sites.Read.All"],
1423
+ "llmTip": "Lists column definitions for a SharePoint list. Returns each column's id, name, displayName, description, type indicator (text, number, choice, dateTime, person, lookup, boolean, calculated, hyperlinkOrPicture, etc.), required, indexed, hidden, readOnly. Use this to discover the schema before creating or updating list items."
1424
+ },
1425
+ {
1426
+ "pathPattern": "/sites/{site-id}/lists/{list-id}/columns",
1427
+ "method": "post",
1428
+ "toolName": "create-sharepoint-list-column",
1429
+ "workScopes": ["Sites.Manage.All"],
1430
+ "llmTip": "Creates a new column on a SharePoint list. Body must include name and exactly one column type property: { name: 'Priority', text: {} } or { name: 'DueDate', dateTime: { format: 'dateOnly' } } or { name: 'Status', choice: { choices: ['Open','In Progress','Done'] } }. Other types: number, boolean, currency, hyperlinkOrPicture, personOrGroup, lookup, calculated. Optional: displayName, description, required, indexed, enforceUniqueValues."
1431
+ },
1432
+ {
1433
+ "pathPattern": "/sites/{site-id}/lists/{list-id}/columns/{columnDefinition-id}",
1434
+ "method": "get",
1435
+ "toolName": "get-sharepoint-list-column",
1436
+ "workScopes": ["Sites.Read.All"],
1437
+ "llmTip": "Gets a specific column definition by ID, including its full type configuration (choices for choice columns, format for dateTime, etc.). Use list-sharepoint-list-columns first to find the column ID."
1438
+ },
1439
+ {
1440
+ "pathPattern": "/sites/{site-id}/lists/{list-id}/columns/{columnDefinition-id}",
1441
+ "method": "patch",
1442
+ "toolName": "update-sharepoint-list-column",
1443
+ "workScopes": ["Sites.Manage.All"],
1444
+ "llmTip": "Updates a column definition. Body: { displayName: 'New name', description: 'New description', required: true, ... }. The column type itself (text, choice, etc.) cannot be changed — only its metadata and per-type options (e.g. choices array for a choice column). Send only the fields you want to change."
1445
+ },
1446
+ {
1447
+ "pathPattern": "/sites/{site-id}/lists/{list-id}/columns/{columnDefinition-id}",
1448
+ "method": "delete",
1449
+ "toolName": "delete-sharepoint-list-column",
1450
+ "workScopes": ["Sites.Manage.All"],
1451
+ "llmTip": "Deletes a column from a SharePoint list. This is irreversible — all data stored in this column across every list item is lost. Confirm with the user before calling. Cannot delete built-in columns (Title, Created, Modified, etc.)."
1452
+ },
1383
1453
  {
1384
1454
  "pathPattern": "/sites/{site-id}/getByPath(path='{path}')",
1385
1455
  "method": "get",